modal 0.73.138__tar.gz → 0.73.140__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.
Files changed (187) hide show
  1. {modal-0.73.138 → modal-0.73.140}/PKG-INFO +1 -1
  2. {modal-0.73.138 → modal-0.73.140}/modal/client.pyi +2 -2
  3. modal-0.73.138/modal/experimental.py → modal-0.73.140/modal/experimental/__init__.py +9 -9
  4. modal-0.73.140/modal/experimental/ipython.py +80 -0
  5. {modal-0.73.138 → modal-0.73.140}/modal/functions.pyi +6 -6
  6. {modal-0.73.138 → modal-0.73.140}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-0.73.138 → modal-0.73.140}/modal.egg-info/SOURCES.txt +2 -4
  8. {modal-0.73.138 → modal-0.73.140}/modal_proto/api.proto +1 -0
  9. {modal-0.73.138 → modal-0.73.140}/modal_proto/api_pb2.py +80 -80
  10. {modal-0.73.138 → modal-0.73.140}/modal_proto/api_pb2.pyi +4 -1
  11. {modal-0.73.138 → modal-0.73.140}/modal_version/_version_generated.py +1 -1
  12. modal-0.73.138/modal/experimental.pyi +0 -29
  13. modal-0.73.138/modal/extensions/__init__.py +0 -1
  14. modal-0.73.138/modal/extensions/ipython.py +0 -41
  15. {modal-0.73.138 → modal-0.73.140}/LICENSE +0 -0
  16. {modal-0.73.138 → modal-0.73.140}/README.md +0 -0
  17. {modal-0.73.138 → modal-0.73.140}/modal/__init__.py +0 -0
  18. {modal-0.73.138 → modal-0.73.140}/modal/__main__.py +0 -0
  19. {modal-0.73.138 → modal-0.73.140}/modal/_clustered_functions.py +0 -0
  20. {modal-0.73.138 → modal-0.73.140}/modal/_clustered_functions.pyi +0 -0
  21. {modal-0.73.138 → modal-0.73.140}/modal/_container_entrypoint.py +0 -0
  22. {modal-0.73.138 → modal-0.73.140}/modal/_functions.py +0 -0
  23. {modal-0.73.138 → modal-0.73.140}/modal/_ipython.py +0 -0
  24. {modal-0.73.138 → modal-0.73.140}/modal/_location.py +0 -0
  25. {modal-0.73.138 → modal-0.73.140}/modal/_object.py +0 -0
  26. {modal-0.73.138 → modal-0.73.140}/modal/_output.py +0 -0
  27. {modal-0.73.138 → modal-0.73.140}/modal/_partial_function.py +0 -0
  28. {modal-0.73.138 → modal-0.73.140}/modal/_proxy_tunnel.py +0 -0
  29. {modal-0.73.138 → modal-0.73.140}/modal/_pty.py +0 -0
  30. {modal-0.73.138 → modal-0.73.140}/modal/_resolver.py +0 -0
  31. {modal-0.73.138 → modal-0.73.140}/modal/_resources.py +0 -0
  32. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/__init__.py +0 -0
  33. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/asgi.py +0 -0
  34. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/container_io_manager.py +0 -0
  35. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/container_io_manager.pyi +0 -0
  36. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/execution_context.py +0 -0
  37. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/execution_context.pyi +0 -0
  38. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  39. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/telemetry.py +0 -0
  40. {modal-0.73.138 → modal-0.73.140}/modal/_runtime/user_code_imports.py +0 -0
  41. {modal-0.73.138 → modal-0.73.140}/modal/_serialization.py +0 -0
  42. {modal-0.73.138 → modal-0.73.140}/modal/_traceback.py +0 -0
  43. {modal-0.73.138 → modal-0.73.140}/modal/_tunnel.py +0 -0
  44. {modal-0.73.138 → modal-0.73.140}/modal/_tunnel.pyi +0 -0
  45. {modal-0.73.138 → modal-0.73.140}/modal/_type_manager.py +0 -0
  46. {modal-0.73.138 → modal-0.73.140}/modal/_utils/__init__.py +0 -0
  47. {modal-0.73.138 → modal-0.73.140}/modal/_utils/app_utils.py +0 -0
  48. {modal-0.73.138 → modal-0.73.140}/modal/_utils/async_utils.py +0 -0
  49. {modal-0.73.138 → modal-0.73.140}/modal/_utils/blob_utils.py +0 -0
  50. {modal-0.73.138 → modal-0.73.140}/modal/_utils/bytes_io_segment_payload.py +0 -0
  51. {modal-0.73.138 → modal-0.73.140}/modal/_utils/deprecation.py +0 -0
  52. {modal-0.73.138 → modal-0.73.140}/modal/_utils/docker_utils.py +0 -0
  53. {modal-0.73.138 → modal-0.73.140}/modal/_utils/function_utils.py +0 -0
  54. {modal-0.73.138 → modal-0.73.140}/modal/_utils/git_utils.py +0 -0
  55. {modal-0.73.138 → modal-0.73.140}/modal/_utils/grpc_testing.py +0 -0
  56. {modal-0.73.138 → modal-0.73.140}/modal/_utils/grpc_utils.py +0 -0
  57. {modal-0.73.138 → modal-0.73.140}/modal/_utils/hash_utils.py +0 -0
  58. {modal-0.73.138 → modal-0.73.140}/modal/_utils/http_utils.py +0 -0
  59. {modal-0.73.138 → modal-0.73.140}/modal/_utils/jwt_utils.py +0 -0
  60. {modal-0.73.138 → modal-0.73.140}/modal/_utils/logger.py +0 -0
  61. {modal-0.73.138 → modal-0.73.140}/modal/_utils/mount_utils.py +0 -0
  62. {modal-0.73.138 → modal-0.73.140}/modal/_utils/name_utils.py +0 -0
  63. {modal-0.73.138 → modal-0.73.140}/modal/_utils/package_utils.py +0 -0
  64. {modal-0.73.138 → modal-0.73.140}/modal/_utils/pattern_utils.py +0 -0
  65. {modal-0.73.138 → modal-0.73.140}/modal/_utils/rand_pb_testing.py +0 -0
  66. {modal-0.73.138 → modal-0.73.140}/modal/_utils/shell_utils.py +0 -0
  67. {modal-0.73.138 → modal-0.73.140}/modal/_vendor/__init__.py +0 -0
  68. {modal-0.73.138 → modal-0.73.140}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  69. {modal-0.73.138 → modal-0.73.140}/modal/_vendor/cloudpickle.py +0 -0
  70. {modal-0.73.138 → modal-0.73.140}/modal/_vendor/tblib.py +0 -0
  71. {modal-0.73.138 → modal-0.73.140}/modal/_watcher.py +0 -0
  72. {modal-0.73.138 → modal-0.73.140}/modal/app.py +0 -0
  73. {modal-0.73.138 → modal-0.73.140}/modal/app.pyi +0 -0
  74. {modal-0.73.138 → modal-0.73.140}/modal/call_graph.py +0 -0
  75. {modal-0.73.138 → modal-0.73.140}/modal/cli/__init__.py +0 -0
  76. {modal-0.73.138 → modal-0.73.140}/modal/cli/_download.py +0 -0
  77. {modal-0.73.138 → modal-0.73.140}/modal/cli/_traceback.py +0 -0
  78. {modal-0.73.138 → modal-0.73.140}/modal/cli/app.py +0 -0
  79. {modal-0.73.138 → modal-0.73.140}/modal/cli/config.py +0 -0
  80. {modal-0.73.138 → modal-0.73.140}/modal/cli/container.py +0 -0
  81. {modal-0.73.138 → modal-0.73.140}/modal/cli/dict.py +0 -0
  82. {modal-0.73.138 → modal-0.73.140}/modal/cli/entry_point.py +0 -0
  83. {modal-0.73.138 → modal-0.73.140}/modal/cli/environment.py +0 -0
  84. {modal-0.73.138 → modal-0.73.140}/modal/cli/import_refs.py +0 -0
  85. {modal-0.73.138 → modal-0.73.140}/modal/cli/launch.py +0 -0
  86. {modal-0.73.138 → modal-0.73.140}/modal/cli/network_file_system.py +0 -0
  87. {modal-0.73.138 → modal-0.73.140}/modal/cli/profile.py +0 -0
  88. {modal-0.73.138 → modal-0.73.140}/modal/cli/programs/__init__.py +0 -0
  89. {modal-0.73.138 → modal-0.73.140}/modal/cli/programs/run_jupyter.py +0 -0
  90. {modal-0.73.138 → modal-0.73.140}/modal/cli/programs/vscode.py +0 -0
  91. {modal-0.73.138 → modal-0.73.140}/modal/cli/queues.py +0 -0
  92. {modal-0.73.138 → modal-0.73.140}/modal/cli/run.py +0 -0
  93. {modal-0.73.138 → modal-0.73.140}/modal/cli/secret.py +0 -0
  94. {modal-0.73.138 → modal-0.73.140}/modal/cli/token.py +0 -0
  95. {modal-0.73.138 → modal-0.73.140}/modal/cli/utils.py +0 -0
  96. {modal-0.73.138 → modal-0.73.140}/modal/cli/volume.py +0 -0
  97. {modal-0.73.138 → modal-0.73.140}/modal/client.py +0 -0
  98. {modal-0.73.138 → modal-0.73.140}/modal/cloud_bucket_mount.py +0 -0
  99. {modal-0.73.138 → modal-0.73.140}/modal/cloud_bucket_mount.pyi +0 -0
  100. {modal-0.73.138 → modal-0.73.140}/modal/cls.py +0 -0
  101. {modal-0.73.138 → modal-0.73.140}/modal/cls.pyi +0 -0
  102. {modal-0.73.138 → modal-0.73.140}/modal/config.py +0 -0
  103. {modal-0.73.138 → modal-0.73.140}/modal/container_process.py +0 -0
  104. {modal-0.73.138 → modal-0.73.140}/modal/container_process.pyi +0 -0
  105. {modal-0.73.138 → modal-0.73.140}/modal/dict.py +0 -0
  106. {modal-0.73.138 → modal-0.73.140}/modal/dict.pyi +0 -0
  107. {modal-0.73.138 → modal-0.73.140}/modal/environments.py +0 -0
  108. {modal-0.73.138 → modal-0.73.140}/modal/environments.pyi +0 -0
  109. {modal-0.73.138 → modal-0.73.140}/modal/exception.py +0 -0
  110. {modal-0.73.138 → modal-0.73.140}/modal/file_io.py +0 -0
  111. {modal-0.73.138 → modal-0.73.140}/modal/file_io.pyi +0 -0
  112. {modal-0.73.138 → modal-0.73.140}/modal/file_pattern_matcher.py +0 -0
  113. {modal-0.73.138 → modal-0.73.140}/modal/functions.py +0 -0
  114. {modal-0.73.138 → modal-0.73.140}/modal/gpu.py +0 -0
  115. {modal-0.73.138 → modal-0.73.140}/modal/image.py +0 -0
  116. {modal-0.73.138 → modal-0.73.140}/modal/image.pyi +0 -0
  117. {modal-0.73.138 → modal-0.73.140}/modal/io_streams.py +0 -0
  118. {modal-0.73.138 → modal-0.73.140}/modal/io_streams.pyi +0 -0
  119. {modal-0.73.138 → modal-0.73.140}/modal/mount.py +0 -0
  120. {modal-0.73.138 → modal-0.73.140}/modal/mount.pyi +0 -0
  121. {modal-0.73.138 → modal-0.73.140}/modal/network_file_system.py +0 -0
  122. {modal-0.73.138 → modal-0.73.140}/modal/network_file_system.pyi +0 -0
  123. {modal-0.73.138 → modal-0.73.140}/modal/object.py +0 -0
  124. {modal-0.73.138 → modal-0.73.140}/modal/object.pyi +0 -0
  125. {modal-0.73.138 → modal-0.73.140}/modal/output.py +0 -0
  126. {modal-0.73.138 → modal-0.73.140}/modal/parallel_map.py +0 -0
  127. {modal-0.73.138 → modal-0.73.140}/modal/parallel_map.pyi +0 -0
  128. {modal-0.73.138 → modal-0.73.140}/modal/partial_function.py +0 -0
  129. {modal-0.73.138 → modal-0.73.140}/modal/partial_function.pyi +0 -0
  130. {modal-0.73.138 → modal-0.73.140}/modal/proxy.py +0 -0
  131. {modal-0.73.138 → modal-0.73.140}/modal/proxy.pyi +0 -0
  132. {modal-0.73.138 → modal-0.73.140}/modal/py.typed +0 -0
  133. {modal-0.73.138 → modal-0.73.140}/modal/queue.py +0 -0
  134. {modal-0.73.138 → modal-0.73.140}/modal/queue.pyi +0 -0
  135. {modal-0.73.138 → modal-0.73.140}/modal/requirements/2023.12.312.txt +0 -0
  136. {modal-0.73.138 → modal-0.73.140}/modal/requirements/2023.12.txt +0 -0
  137. {modal-0.73.138 → modal-0.73.140}/modal/requirements/2024.04.txt +0 -0
  138. {modal-0.73.138 → modal-0.73.140}/modal/requirements/2024.10.txt +0 -0
  139. {modal-0.73.138 → modal-0.73.140}/modal/requirements/PREVIEW.txt +0 -0
  140. {modal-0.73.138 → modal-0.73.140}/modal/requirements/README.md +0 -0
  141. {modal-0.73.138 → modal-0.73.140}/modal/requirements/base-images.json +0 -0
  142. {modal-0.73.138 → modal-0.73.140}/modal/retries.py +0 -0
  143. {modal-0.73.138 → modal-0.73.140}/modal/runner.py +0 -0
  144. {modal-0.73.138 → modal-0.73.140}/modal/runner.pyi +0 -0
  145. {modal-0.73.138 → modal-0.73.140}/modal/running_app.py +0 -0
  146. {modal-0.73.138 → modal-0.73.140}/modal/sandbox.py +0 -0
  147. {modal-0.73.138 → modal-0.73.140}/modal/sandbox.pyi +0 -0
  148. {modal-0.73.138 → modal-0.73.140}/modal/schedule.py +0 -0
  149. {modal-0.73.138 → modal-0.73.140}/modal/scheduler_placement.py +0 -0
  150. {modal-0.73.138 → modal-0.73.140}/modal/secret.py +0 -0
  151. {modal-0.73.138 → modal-0.73.140}/modal/secret.pyi +0 -0
  152. {modal-0.73.138 → modal-0.73.140}/modal/serving.py +0 -0
  153. {modal-0.73.138 → modal-0.73.140}/modal/serving.pyi +0 -0
  154. {modal-0.73.138 → modal-0.73.140}/modal/snapshot.py +0 -0
  155. {modal-0.73.138 → modal-0.73.140}/modal/snapshot.pyi +0 -0
  156. {modal-0.73.138 → modal-0.73.140}/modal/stream_type.py +0 -0
  157. {modal-0.73.138 → modal-0.73.140}/modal/token_flow.py +0 -0
  158. {modal-0.73.138 → modal-0.73.140}/modal/token_flow.pyi +0 -0
  159. {modal-0.73.138 → modal-0.73.140}/modal/volume.py +0 -0
  160. {modal-0.73.138 → modal-0.73.140}/modal/volume.pyi +0 -0
  161. {modal-0.73.138 → modal-0.73.140}/modal.egg-info/dependency_links.txt +0 -0
  162. {modal-0.73.138 → modal-0.73.140}/modal.egg-info/entry_points.txt +0 -0
  163. {modal-0.73.138 → modal-0.73.140}/modal.egg-info/requires.txt +0 -0
  164. {modal-0.73.138 → modal-0.73.140}/modal.egg-info/top_level.txt +0 -0
  165. {modal-0.73.138 → modal-0.73.140}/modal_docs/__init__.py +0 -0
  166. {modal-0.73.138 → modal-0.73.140}/modal_docs/gen_cli_docs.py +0 -0
  167. {modal-0.73.138 → modal-0.73.140}/modal_docs/gen_reference_docs.py +0 -0
  168. {modal-0.73.138 → modal-0.73.140}/modal_docs/mdmd/__init__.py +0 -0
  169. {modal-0.73.138 → modal-0.73.140}/modal_docs/mdmd/mdmd.py +0 -0
  170. {modal-0.73.138 → modal-0.73.140}/modal_docs/mdmd/signatures.py +0 -0
  171. {modal-0.73.138 → modal-0.73.140}/modal_proto/__init__.py +0 -0
  172. {modal-0.73.138 → modal-0.73.140}/modal_proto/api_grpc.py +0 -0
  173. {modal-0.73.138 → modal-0.73.140}/modal_proto/api_pb2_grpc.py +0 -0
  174. {modal-0.73.138 → modal-0.73.140}/modal_proto/api_pb2_grpc.pyi +0 -0
  175. {modal-0.73.138 → modal-0.73.140}/modal_proto/modal_api_grpc.py +0 -0
  176. {modal-0.73.138 → modal-0.73.140}/modal_proto/modal_options_grpc.py +0 -0
  177. {modal-0.73.138 → modal-0.73.140}/modal_proto/options.proto +0 -0
  178. {modal-0.73.138 → modal-0.73.140}/modal_proto/options_grpc.py +0 -0
  179. {modal-0.73.138 → modal-0.73.140}/modal_proto/options_pb2.py +0 -0
  180. {modal-0.73.138 → modal-0.73.140}/modal_proto/options_pb2.pyi +0 -0
  181. {modal-0.73.138 → modal-0.73.140}/modal_proto/options_pb2_grpc.py +0 -0
  182. {modal-0.73.138 → modal-0.73.140}/modal_proto/options_pb2_grpc.pyi +0 -0
  183. {modal-0.73.138 → modal-0.73.140}/modal_proto/py.typed +0 -0
  184. {modal-0.73.138 → modal-0.73.140}/modal_version/__init__.py +0 -0
  185. {modal-0.73.138 → modal-0.73.140}/modal_version/__main__.py +0 -0
  186. {modal-0.73.138 → modal-0.73.140}/pyproject.toml +0 -0
  187. {modal-0.73.138 → modal-0.73.140}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: modal
3
- Version: 0.73.138
3
+ Version: 0.73.140
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -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 = "0.73.138",
34
+ version: str = "0.73.140",
35
35
  ): ...
36
36
  def is_closed(self) -> bool: ...
37
37
  @property
@@ -93,7 +93,7 @@ class Client:
93
93
  server_url: str,
94
94
  client_type: int,
95
95
  credentials: typing.Optional[tuple[str, str]],
96
- version: str = "0.73.138",
96
+ version: str = "0.73.140",
97
97
  ): ...
98
98
  def is_closed(self) -> bool: ...
99
99
  @property
@@ -1,17 +1,17 @@
1
- # Copyright Modal Labs 2022
1
+ # Copyright Modal Labs 2025
2
2
  from dataclasses import dataclass
3
3
  from typing import Any, Callable, Optional
4
4
 
5
5
  from modal_proto import api_pb2
6
6
 
7
- from ._clustered_functions import ClusterInfo, get_cluster_info as _get_cluster_info
8
- from ._functions import _Function
9
- from ._object import _get_environment_name
10
- from ._partial_function import _PartialFunction, _PartialFunctionFlags
11
- from ._runtime.container_io_manager import _ContainerIOManager
12
- from ._utils.async_utils import synchronizer
13
- from .client import _Client
14
- from .exception import InvalidError
7
+ from .._clustered_functions import ClusterInfo, get_cluster_info as _get_cluster_info
8
+ from .._functions import _Function
9
+ from .._object import _get_environment_name
10
+ from .._partial_function import _PartialFunction, _PartialFunctionFlags
11
+ from .._runtime.container_io_manager import _ContainerIOManager
12
+ from .._utils.async_utils import synchronizer
13
+ from ..client import _Client
14
+ from ..exception import InvalidError
15
15
 
16
16
 
17
17
  def stop_fetching_inputs():
@@ -0,0 +1,80 @@
1
+ # Copyright Modal Labs 2025
2
+
3
+ """This module provides Jupyter/IPython extensions for Modal.
4
+
5
+ Use in a notebook with `%load_ext modal.experimental.ipython`.
6
+ """
7
+
8
+ from IPython.core.magic import Magics, line_magic, magics_class
9
+
10
+ from ..cls import Cls
11
+ from ..exception import NotFoundError
12
+ from ..functions import Function
13
+
14
+
15
+ @magics_class
16
+ class ModalMagics(Magics):
17
+ @line_magic
18
+ def modal(self, line):
19
+ """Lookup a deployed Modal Function or Class.
20
+
21
+ **Example:**
22
+
23
+ ```python notest
24
+ %modal from main/my-app import my_function, MyClass as Foo
25
+
26
+ # Now you can call my_function() and Foo from your notebook.
27
+ my_function.remote()
28
+ Foo().my_method.remote()
29
+ ```
30
+ """
31
+ line = line.strip()
32
+ if not line.startswith("from "):
33
+ print("Invalid syntax. Use: %modal from <env>/<app> import <function|Class>[, <function|Class> [as alias]]")
34
+ return
35
+
36
+ # Remove the initial "from "
37
+ line_without_from = line[5:]
38
+ env_app_part, sep, import_part = line_without_from.partition(" import ")
39
+ if not sep:
40
+ print("Invalid syntax. Missing 'import' keyword.")
41
+ return
42
+
43
+ # Parse environment and app from "env/app"
44
+ if "/" not in env_app_part:
45
+ print("Invalid app specification. Expected format: <env>/<app>")
46
+ return
47
+ environment, app = env_app_part.split("/", 1)
48
+
49
+ # Parse the import items (multiple imports separated by commas)
50
+ import_items = [item.strip() for item in import_part.split(",")]
51
+ for item in import_items:
52
+ if not item:
53
+ continue
54
+ parts = item.split()
55
+ # Expect either "Model" or "Model as alias"
56
+ if len(parts) == 0:
57
+ continue
58
+ model_name = parts[0]
59
+ alias = model_name
60
+ if len(parts) == 3 and parts[1] == "as":
61
+ alias = parts[2]
62
+ elif len(parts) > 1:
63
+ print(f"Invalid syntax in import item: {item!r}. Expected format: <function|Class> [as alias]")
64
+ return
65
+
66
+ # Try to load using Function; if not found, fallback to Cls
67
+ try:
68
+ obj: Function | Cls = Function.from_name(app, model_name, environment_name=environment)
69
+ obj.hydrate()
70
+ except NotFoundError:
71
+ obj = Cls.from_name(app, model_name, environment_name=environment)
72
+ obj.hydrate()
73
+
74
+ # Set the loaded object in the notebook namespace
75
+ self.shell.user_ns[alias] = obj # type: ignore
76
+ print(f"Loaded {alias!r} from environment {environment!r} and app {app!r}.")
77
+
78
+
79
+ def load_ipython_extension(ipython):
80
+ ipython.register_magics(ModalMagics)
@@ -199,11 +199,11 @@ class Function(
199
199
 
200
200
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
201
201
 
202
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
202
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
203
203
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
204
204
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
205
205
 
206
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
206
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
207
207
 
208
208
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
209
209
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -218,19 +218,19 @@ class Function(
218
218
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
219
219
  ) -> modal._functions.OriginalReturnType: ...
220
220
 
221
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
221
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
222
222
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
223
223
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
224
224
 
225
225
  _experimental_spawn: ___experimental_spawn_spec[
226
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
226
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
227
227
  ]
228
228
 
229
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
229
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
230
230
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
231
231
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
232
232
 
233
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
233
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
234
234
 
235
235
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
236
236
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: modal
3
- Version: 0.73.138
3
+ Version: 0.73.140
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -39,8 +39,6 @@ modal/dict.pyi
39
39
  modal/environments.py
40
40
  modal/environments.pyi
41
41
  modal/exception.py
42
- modal/experimental.py
43
- modal/experimental.pyi
44
42
  modal/file_io.py
45
43
  modal/file_io.pyi
46
44
  modal/file_pattern_matcher.py
@@ -148,8 +146,8 @@ modal/cli/volume.py
148
146
  modal/cli/programs/__init__.py
149
147
  modal/cli/programs/run_jupyter.py
150
148
  modal/cli/programs/vscode.py
151
- modal/extensions/__init__.py
152
- modal/extensions/ipython.py
149
+ modal/experimental/__init__.py
150
+ modal/experimental/ipython.py
153
151
  modal/requirements/2023.12.312.txt
154
152
  modal/requirements/2023.12.txt
155
153
  modal/requirements/2024.04.txt
@@ -2875,6 +2875,7 @@ message VolumeMount {
2875
2875
  string volume_id = 1;
2876
2876
  string mount_path = 2;
2877
2877
  bool allow_background_commits = 3;
2878
+ bool read_only = 4;
2878
2879
  }
2879
2880
 
2880
2881
  message VolumePutFilesRequest {