modal 1.1.1.dev29__tar.gz → 1.1.1.dev31__tar.gz

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 (188) hide show
  1. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/PKG-INFO +1 -1
  2. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_functions.py +0 -3
  3. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/app.py +0 -4
  4. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/app.pyi +0 -4
  5. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/client.pyi +2 -2
  6. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/functions.pyi +0 -1
  7. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/image.py +4 -2
  8. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/image.pyi +8 -4
  9. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/sandbox.py +16 -16
  10. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/sandbox.pyi +15 -15
  11. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal.egg-info/PKG-INFO +1 -1
  12. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_version/__init__.py +1 -1
  13. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/LICENSE +0 -0
  14. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/README.md +0 -0
  15. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/__init__.py +0 -0
  16. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/__main__.py +0 -0
  17. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_clustered_functions.py +0 -0
  18. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_clustered_functions.pyi +0 -0
  19. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_container_entrypoint.py +0 -0
  20. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_ipython.py +0 -0
  21. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_location.py +0 -0
  22. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_object.py +0 -0
  23. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_output.py +0 -0
  24. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_partial_function.py +0 -0
  25. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_pty.py +0 -0
  26. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_resolver.py +0 -0
  27. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_resources.py +0 -0
  28. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/__init__.py +0 -0
  29. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/asgi.py +0 -0
  30. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/container_io_manager.py +0 -0
  31. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/container_io_manager.pyi +0 -0
  32. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/execution_context.py +0 -0
  33. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/execution_context.pyi +0 -0
  34. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  35. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/telemetry.py +0 -0
  36. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_runtime/user_code_imports.py +0 -0
  37. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_serialization.py +0 -0
  38. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_traceback.py +0 -0
  39. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_tunnel.py +0 -0
  40. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_tunnel.pyi +0 -0
  41. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_type_manager.py +0 -0
  42. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/__init__.py +0 -0
  43. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/app_utils.py +0 -0
  44. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/async_utils.py +0 -0
  45. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/auth_token_manager.py +0 -0
  46. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/blob_utils.py +0 -0
  47. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/bytes_io_segment_payload.py +0 -0
  48. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/deprecation.py +0 -0
  49. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/docker_utils.py +0 -0
  50. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/function_utils.py +0 -0
  51. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/git_utils.py +0 -0
  52. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/grpc_testing.py +0 -0
  53. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/grpc_utils.py +0 -0
  54. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/hash_utils.py +0 -0
  55. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/http_utils.py +0 -0
  56. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/jwt_utils.py +0 -0
  57. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/logger.py +0 -0
  58. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/mount_utils.py +0 -0
  59. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/name_utils.py +0 -0
  60. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/package_utils.py +0 -0
  61. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/pattern_utils.py +0 -0
  62. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/rand_pb_testing.py +0 -0
  63. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/shell_utils.py +0 -0
  64. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_utils/time_utils.py +0 -0
  65. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_vendor/__init__.py +0 -0
  66. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  67. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_vendor/cloudpickle.py +0 -0
  68. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_vendor/tblib.py +0 -0
  69. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/_watcher.py +0 -0
  70. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/2023.12.312.txt +0 -0
  71. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/2023.12.txt +0 -0
  72. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/2024.04.txt +0 -0
  73. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/2024.10.txt +0 -0
  74. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/2025.06.txt +0 -0
  75. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/PREVIEW.txt +0 -0
  76. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/README.md +0 -0
  77. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/builder/base-images.json +0 -0
  78. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/call_graph.py +0 -0
  79. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/__init__.py +0 -0
  80. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/_download.py +0 -0
  81. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/_traceback.py +0 -0
  82. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/app.py +0 -0
  83. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/cluster.py +0 -0
  84. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/config.py +0 -0
  85. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/container.py +0 -0
  86. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/dict.py +0 -0
  87. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/entry_point.py +0 -0
  88. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/environment.py +0 -0
  89. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/import_refs.py +0 -0
  90. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/launch.py +0 -0
  91. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/network_file_system.py +0 -0
  92. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/profile.py +0 -0
  93. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/programs/__init__.py +0 -0
  94. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/programs/run_jupyter.py +0 -0
  95. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/programs/vscode.py +0 -0
  96. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/queues.py +0 -0
  97. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/run.py +0 -0
  98. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/secret.py +0 -0
  99. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/token.py +0 -0
  100. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/utils.py +0 -0
  101. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cli/volume.py +0 -0
  102. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/client.py +0 -0
  103. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cloud_bucket_mount.py +0 -0
  104. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cloud_bucket_mount.pyi +0 -0
  105. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cls.py +0 -0
  106. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/cls.pyi +0 -0
  107. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/config.py +0 -0
  108. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/container_process.py +0 -0
  109. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/container_process.pyi +0 -0
  110. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/dict.py +0 -0
  111. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/dict.pyi +0 -0
  112. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/environments.py +0 -0
  113. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/environments.pyi +0 -0
  114. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/exception.py +0 -0
  115. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/experimental/__init__.py +0 -0
  116. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/experimental/flash.py +0 -0
  117. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/experimental/flash.pyi +0 -0
  118. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/experimental/ipython.py +0 -0
  119. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/file_io.py +0 -0
  120. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/file_io.pyi +0 -0
  121. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/file_pattern_matcher.py +0 -0
  122. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/functions.py +0 -0
  123. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/gpu.py +0 -0
  124. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/io_streams.py +0 -0
  125. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/io_streams.pyi +0 -0
  126. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/mount.py +0 -0
  127. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/mount.pyi +0 -0
  128. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/network_file_system.py +0 -0
  129. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/network_file_system.pyi +0 -0
  130. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/object.py +0 -0
  131. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/object.pyi +0 -0
  132. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/output.py +0 -0
  133. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/parallel_map.py +0 -0
  134. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/parallel_map.pyi +0 -0
  135. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/partial_function.py +0 -0
  136. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/partial_function.pyi +0 -0
  137. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/proxy.py +0 -0
  138. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/proxy.pyi +0 -0
  139. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/py.typed +0 -0
  140. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/queue.py +0 -0
  141. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/queue.pyi +0 -0
  142. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/retries.py +0 -0
  143. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/runner.py +0 -0
  144. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/runner.pyi +0 -0
  145. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/running_app.py +0 -0
  146. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/schedule.py +0 -0
  147. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/scheduler_placement.py +0 -0
  148. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/secret.py +0 -0
  149. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/secret.pyi +0 -0
  150. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/serving.py +0 -0
  151. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/serving.pyi +0 -0
  152. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/snapshot.py +0 -0
  153. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/snapshot.pyi +0 -0
  154. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/stream_type.py +0 -0
  155. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/token_flow.py +0 -0
  156. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/token_flow.pyi +0 -0
  157. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/volume.py +0 -0
  158. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal/volume.pyi +0 -0
  159. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal.egg-info/SOURCES.txt +0 -0
  160. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal.egg-info/dependency_links.txt +0 -0
  161. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal.egg-info/entry_points.txt +0 -0
  162. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal.egg-info/requires.txt +0 -0
  163. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal.egg-info/top_level.txt +0 -0
  164. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_docs/__init__.py +0 -0
  165. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_docs/gen_cli_docs.py +0 -0
  166. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_docs/gen_reference_docs.py +0 -0
  167. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_docs/mdmd/__init__.py +0 -0
  168. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_docs/mdmd/mdmd.py +0 -0
  169. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_docs/mdmd/signatures.py +0 -0
  170. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/__init__.py +0 -0
  171. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/api.proto +0 -0
  172. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/api_grpc.py +0 -0
  173. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/api_pb2.py +0 -0
  174. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/api_pb2.pyi +0 -0
  175. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/api_pb2_grpc.py +0 -0
  176. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/api_pb2_grpc.pyi +0 -0
  177. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/modal_api_grpc.py +0 -0
  178. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/modal_options_grpc.py +0 -0
  179. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/options.proto +0 -0
  180. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/options_grpc.py +0 -0
  181. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/options_pb2.py +0 -0
  182. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/options_pb2.pyi +0 -0
  183. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/options_pb2_grpc.py +0 -0
  184. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/options_pb2_grpc.pyi +0 -0
  185. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_proto/py.typed +0 -0
  186. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/modal_version/__main__.py +0 -0
  187. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/pyproject.toml +0 -0
  188. {modal-1.1.1.dev29 → modal-1.1.1.dev31}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.1.dev29
3
+ Version: 1.1.1.dev31
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -629,7 +629,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
629
629
  experimental_options: Optional[dict[str, str]] = None,
630
630
  _experimental_proxy_ip: Optional[str] = None,
631
631
  _experimental_custom_scaling_factor: Optional[float] = None,
632
- _experimental_enable_gpu_snapshot: bool = False,
633
632
  ) -> "_Function":
634
633
  """mdmd:hidden"""
635
634
  # Needed to avoid circular imports
@@ -930,7 +929,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
930
929
  _experimental_concurrent_cancellations=True,
931
930
  _experimental_proxy_ip=_experimental_proxy_ip,
932
931
  _experimental_custom_scaling=_experimental_custom_scaling_factor is not None,
933
- _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
934
932
  # --- These are deprecated in favor of autoscaler_settings
935
933
  warm_pool_size=min_containers or 0,
936
934
  concurrency_limit=max_containers or 0,
@@ -967,7 +965,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
967
965
  _experimental_group_size=function_definition._experimental_group_size,
968
966
  _experimental_buffer_containers=function_definition._experimental_buffer_containers,
969
967
  _experimental_custom_scaling=function_definition._experimental_custom_scaling,
970
- _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
971
968
  _experimental_proxy_ip=function_definition._experimental_proxy_ip,
972
969
  snapshot_debug=function_definition.snapshot_debug,
973
970
  runtime_perf_record=function_definition.runtime_perf_record,
@@ -665,7 +665,6 @@ class _App:
665
665
  ] = None, # Experimental controls over fine-grained scheduling (alpha).
666
666
  _experimental_proxy_ip: Optional[str] = None, # IP address of proxy
667
667
  _experimental_custom_scaling_factor: Optional[float] = None, # Custom scaling factor
668
- _experimental_enable_gpu_snapshot: bool = False, # Experimentally enable GPU memory snapshots.
669
668
  # Parameters below here are deprecated. Please update your code as suggested
670
669
  keep_warm: Optional[int] = None, # Replaced with `min_containers`
671
670
  concurrency_limit: Optional[int] = None, # Replaced with `max_containers`
@@ -830,7 +829,6 @@ class _App:
830
829
  include_source=include_source if include_source is not None else self._include_source_default,
831
830
  experimental_options={k: str(v) for k, v in (experimental_options or {}).items()},
832
831
  _experimental_proxy_ip=_experimental_proxy_ip,
833
- _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
834
832
  )
835
833
 
836
834
  self._add_function(function, webhook_config is not None)
@@ -889,7 +887,6 @@ class _App:
889
887
  ] = None, # Experimental controls over fine-grained scheduling (alpha).
890
888
  _experimental_proxy_ip: Optional[str] = None, # IP address of proxy
891
889
  _experimental_custom_scaling_factor: Optional[float] = None, # Custom scaling factor
892
- _experimental_enable_gpu_snapshot: bool = False, # Experimentally enable GPU memory snapshots.
893
890
  # Parameters below here are deprecated. Please update your code as suggested
894
891
  keep_warm: Optional[int] = None, # Replaced with `min_containers`
895
892
  concurrency_limit: Optional[int] = None, # Replaced with `max_containers`
@@ -1014,7 +1011,6 @@ class _App:
1014
1011
  experimental_options={k: str(v) for k, v in (experimental_options or {}).items()},
1015
1012
  _experimental_proxy_ip=_experimental_proxy_ip,
1016
1013
  _experimental_custom_scaling_factor=_experimental_custom_scaling_factor,
1017
- _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
1018
1014
  )
1019
1015
 
1020
1016
  self._add_function(cls_func, is_web_endpoint=False)
@@ -425,7 +425,6 @@ class _App:
425
425
  _experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
426
426
  _experimental_proxy_ip: typing.Optional[str] = None,
427
427
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
428
- _experimental_enable_gpu_snapshot: bool = False,
429
428
  keep_warm: typing.Optional[int] = None,
430
429
  concurrency_limit: typing.Optional[int] = None,
431
430
  container_idle_timeout: typing.Optional[int] = None,
@@ -477,7 +476,6 @@ class _App:
477
476
  _experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
478
477
  _experimental_proxy_ip: typing.Optional[str] = None,
479
478
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
480
- _experimental_enable_gpu_snapshot: bool = False,
481
479
  keep_warm: typing.Optional[int] = None,
482
480
  concurrency_limit: typing.Optional[int] = None,
483
481
  container_idle_timeout: typing.Optional[int] = None,
@@ -1030,7 +1028,6 @@ class App:
1030
1028
  _experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
1031
1029
  _experimental_proxy_ip: typing.Optional[str] = None,
1032
1030
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
1033
- _experimental_enable_gpu_snapshot: bool = False,
1034
1031
  keep_warm: typing.Optional[int] = None,
1035
1032
  concurrency_limit: typing.Optional[int] = None,
1036
1033
  container_idle_timeout: typing.Optional[int] = None,
@@ -1082,7 +1079,6 @@ class App:
1082
1079
  _experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
1083
1080
  _experimental_proxy_ip: typing.Optional[str] = None,
1084
1081
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
1085
- _experimental_enable_gpu_snapshot: bool = False,
1086
1082
  keep_warm: typing.Optional[int] = None,
1087
1083
  concurrency_limit: typing.Optional[int] = None,
1088
1084
  container_idle_timeout: typing.Optional[int] = None,
@@ -33,7 +33,7 @@ class _Client:
33
33
  server_url: str,
34
34
  client_type: int,
35
35
  credentials: typing.Optional[tuple[str, str]],
36
- version: str = "1.1.1.dev29",
36
+ version: str = "1.1.1.dev31",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -164,7 +164,7 @@ class Client:
164
164
  server_url: str,
165
165
  client_type: int,
166
166
  credentials: typing.Optional[tuple[str, str]],
167
- version: str = "1.1.1.dev29",
167
+ version: str = "1.1.1.dev31",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -109,7 +109,6 @@ class Function(
109
109
  experimental_options: typing.Optional[dict[str, str]] = None,
110
110
  _experimental_proxy_ip: typing.Optional[str] = None,
111
111
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
112
- _experimental_enable_gpu_snapshot: bool = False,
113
112
  ) -> Function:
114
113
  """mdmd:hidden"""
115
114
  ...
@@ -1561,7 +1561,7 @@ class _Image(_Object, type_prefix="im"):
1561
1561
  self,
1562
1562
  entrypoint_commands: list[str],
1563
1563
  ) -> "_Image":
1564
- """Set the entrypoint for the image."""
1564
+ """Set the ENTRYPOINT for the image."""
1565
1565
  if not isinstance(entrypoint_commands, list) or not all(isinstance(x, str) for x in entrypoint_commands):
1566
1566
  raise InvalidError("entrypoint_commands must be a list of strings.")
1567
1567
  args_str = _flatten_str_args("entrypoint", "entrypoint_commands", entrypoint_commands)
@@ -2237,7 +2237,9 @@ class _Image(_Object, type_prefix="im"):
2237
2237
  )
2238
2238
 
2239
2239
  def cmd(self, cmd: list[str]) -> "_Image":
2240
- """Set the default entrypoint argument (`CMD`) for the image.
2240
+ """Set the default command (`CMD`) to run when a container is started.
2241
+
2242
+ Used with `modal.Sandbox`. Has no effect on `modal.Function`.
2241
2243
 
2242
2244
  **Example**
2243
2245
 
@@ -584,7 +584,7 @@ class _Image(modal._object._Object):
584
584
  ...
585
585
 
586
586
  def entrypoint(self, entrypoint_commands: list[str]) -> _Image:
587
- """Set the entrypoint for the image."""
587
+ """Set the ENTRYPOINT for the image."""
588
588
  ...
589
589
 
590
590
  def shell(self, shell_commands: list[str]) -> _Image:
@@ -912,7 +912,9 @@ class _Image(modal._object._Object):
912
912
  ...
913
913
 
914
914
  def cmd(self, cmd: list[str]) -> _Image:
915
- """Set the default entrypoint argument (`CMD`) for the image.
915
+ """Set the default command (`CMD`) to run when a container is started.
916
+
917
+ Used with `modal.Sandbox`. Has no effect on `modal.Function`.
916
918
 
917
919
  **Example**
918
920
 
@@ -1424,7 +1426,7 @@ class Image(modal.object.Object):
1424
1426
  ...
1425
1427
 
1426
1428
  def entrypoint(self, entrypoint_commands: list[str]) -> Image:
1427
- """Set the entrypoint for the image."""
1429
+ """Set the ENTRYPOINT for the image."""
1428
1430
  ...
1429
1431
 
1430
1432
  def shell(self, shell_commands: list[str]) -> Image:
@@ -1752,7 +1754,9 @@ class Image(modal.object.Object):
1752
1754
  ...
1753
1755
 
1754
1756
  def cmd(self, cmd: list[str]) -> Image:
1755
- """Set the default entrypoint argument (`CMD`) for the image.
1757
+ """Set the default command (`CMD`) to run when a container is started.
1758
+
1759
+ Used with `modal.Sandbox`. Has no effect on `modal.Function`.
1756
1760
 
1757
1761
  **Example**
1758
1762
 
@@ -60,15 +60,15 @@ if TYPE_CHECKING:
60
60
  import modal.app
61
61
 
62
62
 
63
- def _validate_exec_args(entrypoint_args: Sequence[str]) -> None:
63
+ def _validate_exec_args(args: Sequence[str]) -> None:
64
64
  # Entrypoint args must be strings.
65
- if not all(isinstance(arg, str) for arg in entrypoint_args):
65
+ if not all(isinstance(arg, str) for arg in args):
66
66
  raise InvalidError("All entrypoint arguments must be strings")
67
67
  # Avoid "[Errno 7] Argument list too long" errors.
68
- total_arg_len = sum(len(arg) for arg in entrypoint_args)
68
+ total_arg_len = sum(len(arg) for arg in args)
69
69
  if total_arg_len > ARG_MAX_BYTES:
70
70
  raise InvalidError(
71
- f"Total length of entrypoint arguments must be less than {ARG_MAX_BYTES} bytes (ARG_MAX). "
71
+ f"Total length of CMD arguments must be less than {ARG_MAX_BYTES} bytes (ARG_MAX). "
72
72
  f"Got {total_arg_len} bytes."
73
73
  )
74
74
 
@@ -104,7 +104,7 @@ class _Sandbox(_Object, type_prefix="sb"):
104
104
 
105
105
  @staticmethod
106
106
  def _new(
107
- entrypoint_args: Sequence[str],
107
+ args: Sequence[str],
108
108
  image: _Image,
109
109
  secrets: Sequence[_Secret],
110
110
  name: Optional[str] = None,
@@ -208,7 +208,7 @@ class _Sandbox(_Object, type_prefix="sb"):
208
208
 
209
209
  ephemeral_disk = None # Ephemeral disk requests not supported on Sandboxes.
210
210
  definition = api_pb2.Sandbox(
211
- entrypoint_args=entrypoint_args,
211
+ entrypoint_args=args,
212
212
  image_id=image.object_id,
213
213
  mount_ids=[mount.object_id for mount in mounts] + [mount.object_id for mount in image._mount_layers],
214
214
  secret_ids=[secret.object_id for secret in secrets],
@@ -250,7 +250,7 @@ class _Sandbox(_Object, type_prefix="sb"):
250
250
 
251
251
  @staticmethod
252
252
  async def create(
253
- *entrypoint_args: str,
253
+ *args: str, # Set the CMD of the Sandbox, overriding any CMD of the container image.
254
254
  # Associate the sandbox with an app. Required unless creating from a container.
255
255
  app: Optional["modal.app._App"] = None,
256
256
  name: Optional[str] = None, # Optionally give the sandbox a name. Unique within an app.
@@ -316,7 +316,7 @@ class _Sandbox(_Object, type_prefix="sb"):
316
316
  )
317
317
 
318
318
  return await _Sandbox._create(
319
- *entrypoint_args,
319
+ *args,
320
320
  app=app,
321
321
  name=name,
322
322
  image=image,
@@ -346,7 +346,7 @@ class _Sandbox(_Object, type_prefix="sb"):
346
346
 
347
347
  @staticmethod
348
348
  async def _create(
349
- *entrypoint_args: str,
349
+ *args: str, # Set the CMD of the Sandbox, overriding any CMD of the container image.
350
350
  # Associate the sandbox with an app. Required unless creating from a container.
351
351
  app: Optional["modal.app._App"] = None,
352
352
  name: Optional[str] = None, # Optionally give the sandbox a name. Unique within an app.
@@ -395,11 +395,11 @@ class _Sandbox(_Object, type_prefix="sb"):
395
395
  # sandbox that runs the shell session
396
396
  from .app import _App
397
397
 
398
- _validate_exec_args(entrypoint_args)
398
+ _validate_exec_args(args)
399
399
 
400
400
  # TODO(erikbern): Get rid of the `_new` method and create an already-hydrated object
401
401
  obj = _Sandbox._new(
402
- entrypoint_args,
402
+ args,
403
403
  image=image or _default_image,
404
404
  secrets=secrets,
405
405
  name=name,
@@ -648,7 +648,7 @@ class _Sandbox(_Object, type_prefix="sb"):
648
648
  @overload
649
649
  async def exec(
650
650
  self,
651
- *cmds: str,
651
+ *args: str,
652
652
  pty_info: Optional[api_pb2.PTYInfo] = None,
653
653
  stdout: StreamType = StreamType.PIPE,
654
654
  stderr: StreamType = StreamType.PIPE,
@@ -663,7 +663,7 @@ class _Sandbox(_Object, type_prefix="sb"):
663
663
  @overload
664
664
  async def exec(
665
665
  self,
666
- *cmds: str,
666
+ *args: str,
667
667
  pty_info: Optional[api_pb2.PTYInfo] = None,
668
668
  stdout: StreamType = StreamType.PIPE,
669
669
  stderr: StreamType = StreamType.PIPE,
@@ -677,7 +677,7 @@ class _Sandbox(_Object, type_prefix="sb"):
677
677
 
678
678
  async def exec(
679
679
  self,
680
- *cmds: str,
680
+ *args: str,
681
681
  pty_info: Optional[api_pb2.PTYInfo] = None, # Deprecated: internal use only
682
682
  stdout: StreamType = StreamType.PIPE,
683
683
  stderr: StreamType = StreamType.PIPE,
@@ -713,7 +713,7 @@ class _Sandbox(_Object, type_prefix="sb"):
713
713
 
714
714
  if workdir is not None and not workdir.startswith("/"):
715
715
  raise InvalidError(f"workdir must be an absolute path, got: {workdir}")
716
- _validate_exec_args(cmds)
716
+ _validate_exec_args(args)
717
717
 
718
718
  # Force secret resolution so we can pass the secret IDs to the backend.
719
719
  secret_coros = [secret.hydrate(client=self._client) for secret in secrets]
@@ -722,7 +722,7 @@ class _Sandbox(_Object, type_prefix="sb"):
722
722
  task_id = await self._get_task_id()
723
723
  req = api_pb2.ContainerExecRequest(
724
724
  task_id=task_id,
725
- command=cmds,
725
+ command=args,
726
726
  pty_info=_pty_info or pty_info,
727
727
  runtime_debug=config.get("function_runtime_debug"),
728
728
  timeout_secs=timeout or 0,
@@ -25,7 +25,7 @@ import os
25
25
  import typing
26
26
  import typing_extensions
27
27
 
28
- def _validate_exec_args(entrypoint_args: collections.abc.Sequence[str]) -> None: ...
28
+ def _validate_exec_args(args: collections.abc.Sequence[str]) -> None: ...
29
29
 
30
30
  class DefaultSandboxNameOverride(str):
31
31
  """A singleton class that represents the default sandbox name override.
@@ -55,7 +55,7 @@ class _Sandbox(modal._object._Object):
55
55
 
56
56
  @staticmethod
57
57
  def _new(
58
- entrypoint_args: collections.abc.Sequence[str],
58
+ args: collections.abc.Sequence[str],
59
59
  image: modal.image._Image,
60
60
  secrets: collections.abc.Sequence[modal.secret._Secret],
61
61
  name: typing.Optional[str] = None,
@@ -89,7 +89,7 @@ class _Sandbox(modal._object._Object):
89
89
 
90
90
  @staticmethod
91
91
  async def create(
92
- *entrypoint_args: str,
92
+ *args: str,
93
93
  app: typing.Optional[modal.app._App] = None,
94
94
  name: typing.Optional[str] = None,
95
95
  image: typing.Optional[modal.image._Image] = None,
@@ -136,7 +136,7 @@ class _Sandbox(modal._object._Object):
136
136
 
137
137
  @staticmethod
138
138
  async def _create(
139
- *entrypoint_args: str,
139
+ *args: str,
140
140
  app: typing.Optional[modal.app._App] = None,
141
141
  name: typing.Optional[str] = None,
142
142
  image: typing.Optional[modal.image._Image] = None,
@@ -244,7 +244,7 @@ class _Sandbox(modal._object._Object):
244
244
  @typing.overload
245
245
  async def exec(
246
246
  self,
247
- *cmds: str,
247
+ *args: str,
248
248
  pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
249
249
  stdout: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
250
250
  stderr: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
@@ -258,7 +258,7 @@ class _Sandbox(modal._object._Object):
258
258
  @typing.overload
259
259
  async def exec(
260
260
  self,
261
- *cmds: str,
261
+ *args: str,
262
262
  pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
263
263
  stdout: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
264
264
  stderr: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
@@ -364,7 +364,7 @@ class Sandbox(modal.object.Object):
364
364
 
365
365
  @staticmethod
366
366
  def _new(
367
- entrypoint_args: collections.abc.Sequence[str],
367
+ args: collections.abc.Sequence[str],
368
368
  image: modal.image.Image,
369
369
  secrets: collections.abc.Sequence[modal.secret.Secret],
370
370
  name: typing.Optional[str] = None,
@@ -399,7 +399,7 @@ class Sandbox(modal.object.Object):
399
399
  def __call__(
400
400
  self,
401
401
  /,
402
- *entrypoint_args: str,
402
+ *args: str,
403
403
  app: typing.Optional[modal.app.App] = None,
404
404
  name: typing.Optional[str] = None,
405
405
  image: typing.Optional[modal.image.Image] = None,
@@ -449,7 +449,7 @@ class Sandbox(modal.object.Object):
449
449
  async def aio(
450
450
  self,
451
451
  /,
452
- *entrypoint_args: str,
452
+ *args: str,
453
453
  app: typing.Optional[modal.app.App] = None,
454
454
  name: typing.Optional[str] = None,
455
455
  image: typing.Optional[modal.image.Image] = None,
@@ -502,7 +502,7 @@ class Sandbox(modal.object.Object):
502
502
  def __call__(
503
503
  self,
504
504
  /,
505
- *entrypoint_args: str,
505
+ *args: str,
506
506
  app: typing.Optional[modal.app.App] = None,
507
507
  name: typing.Optional[str] = None,
508
508
  image: typing.Optional[modal.image.Image] = None,
@@ -538,7 +538,7 @@ class Sandbox(modal.object.Object):
538
538
  async def aio(
539
539
  self,
540
540
  /,
541
- *entrypoint_args: str,
541
+ *args: str,
542
542
  app: typing.Optional[modal.app.App] = None,
543
543
  name: typing.Optional[str] = None,
544
544
  image: typing.Optional[modal.image.Image] = None,
@@ -758,7 +758,7 @@ class Sandbox(modal.object.Object):
758
758
  def __call__(
759
759
  self,
760
760
  /,
761
- *cmds: str,
761
+ *args: str,
762
762
  pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
763
763
  stdout: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
764
764
  stderr: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
@@ -773,7 +773,7 @@ class Sandbox(modal.object.Object):
773
773
  def __call__(
774
774
  self,
775
775
  /,
776
- *cmds: str,
776
+ *args: str,
777
777
  pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
778
778
  stdout: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
779
779
  stderr: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
@@ -788,7 +788,7 @@ class Sandbox(modal.object.Object):
788
788
  async def aio(
789
789
  self,
790
790
  /,
791
- *cmds: str,
791
+ *args: str,
792
792
  pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
793
793
  stdout: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
794
794
  stderr: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
@@ -803,7 +803,7 @@ class Sandbox(modal.object.Object):
803
803
  async def aio(
804
804
  self,
805
805
  /,
806
- *cmds: str,
806
+ *args: str,
807
807
  pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
808
808
  stdout: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
809
809
  stderr: modal.stream_type.StreamType = modal.stream_type.StreamType.PIPE,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.1.dev29
3
+ Version: 1.1.1.dev31
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -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.dev29"
4
+ __version__ = "1.1.1.dev31"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes