modal 0.66.14__py3-none-any.whl → 0.66.39__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.
Files changed (51) hide show
  1. modal/__init__.py +1 -1
  2. modal/_container_entrypoint.py +27 -358
  3. modal/_runtime/__init__.py +1 -0
  4. modal/{_asgi.py → _runtime/asgi.py} +8 -7
  5. modal/{_container_io_manager.py → _runtime/container_io_manager.py} +18 -27
  6. modal/{execution_context.py → _runtime/execution_context.py} +2 -1
  7. modal/{_telemetry.py → _runtime/telemetry.py} +1 -1
  8. modal/_runtime/user_code_imports.py +361 -0
  9. modal/_serialization.py +1 -1
  10. modal/_utils/function_utils.py +28 -8
  11. modal/app.py +13 -46
  12. modal/cli/import_refs.py +4 -38
  13. modal/client.pyi +2 -2
  14. modal/dict.py +0 -6
  15. modal/dict.pyi +0 -4
  16. modal/experimental.py +1 -4
  17. modal/functions.py +11 -10
  18. modal/functions.pyi +8 -8
  19. modal/gpu.py +8 -6
  20. modal/image.py +93 -6
  21. modal/image.pyi +20 -2
  22. modal/io_streams.py +32 -12
  23. modal/io_streams.pyi +8 -4
  24. modal/mount.py +3 -2
  25. modal/network_file_system.py +0 -28
  26. modal/network_file_system.pyi +0 -14
  27. modal/parallel_map.py +1 -1
  28. modal/partial_function.py +11 -1
  29. modal/queue.py +0 -6
  30. modal/queue.pyi +0 -4
  31. modal/runner.py +1 -1
  32. modal/sandbox.py +1 -1
  33. modal/secret.py +1 -1
  34. modal/volume.py +0 -22
  35. modal/volume.pyi +0 -9
  36. {modal-0.66.14.dist-info → modal-0.66.39.dist-info}/METADATA +1 -2
  37. {modal-0.66.14.dist-info → modal-0.66.39.dist-info}/RECORD +49 -49
  38. modal_proto/api.proto +2 -21
  39. modal_proto/api_grpc.py +0 -16
  40. modal_proto/api_pb2.py +702 -726
  41. modal_proto/api_pb2.pyi +6 -60
  42. modal_proto/api_pb2_grpc.py +0 -33
  43. modal_proto/api_pb2_grpc.pyi +0 -10
  44. modal_proto/modal_api_grpc.py +0 -1
  45. modal_version/_version_generated.py +1 -1
  46. modal/_container_io_manager.pyi +0 -414
  47. modal/execution_context.pyi +0 -22
  48. {modal-0.66.14.dist-info → modal-0.66.39.dist-info}/LICENSE +0 -0
  49. {modal-0.66.14.dist-info → modal-0.66.39.dist-info}/WHEEL +0 -0
  50. {modal-0.66.14.dist-info → modal-0.66.39.dist-info}/entry_points.txt +0 -0
  51. {modal-0.66.14.dist-info → modal-0.66.39.dist-info}/top_level.txt +0 -0
@@ -26,13 +26,6 @@ class _NetworkFileSystem(modal.object._Object):
26
26
  _heartbeat_sleep: float = 300,
27
27
  ) -> typing.AsyncContextManager[_NetworkFileSystem]: ...
28
28
  @staticmethod
29
- def persisted(
30
- label: str, namespace=1, environment_name: typing.Optional[str] = None, cloud: typing.Optional[str] = None
31
- ): ...
32
- def persist(
33
- self, label: str, namespace=1, environment_name: typing.Optional[str] = None, cloud: typing.Optional[str] = None
34
- ): ...
35
- @staticmethod
36
29
  async def lookup(
37
30
  label: str,
38
31
  namespace=1,
@@ -85,13 +78,6 @@ class NetworkFileSystem(modal.object.Object):
85
78
  environment_name: typing.Optional[str] = None,
86
79
  _heartbeat_sleep: float = 300,
87
80
  ) -> synchronicity.combined_types.AsyncAndBlockingContextManager[NetworkFileSystem]: ...
88
- @staticmethod
89
- def persisted(
90
- label: str, namespace=1, environment_name: typing.Optional[str] = None, cloud: typing.Optional[str] = None
91
- ): ...
92
- def persist(
93
- self, label: str, namespace=1, environment_name: typing.Optional[str] = None, cloud: typing.Optional[str] = None
94
- ): ...
95
81
 
96
82
  class __lookup_spec(typing_extensions.Protocol):
97
83
  def __call__(
modal/parallel_map.py CHANGED
@@ -7,6 +7,7 @@ from typing import Any, Callable, Dict, Optional, Set, Tuple
7
7
 
8
8
  from grpclib import GRPCError, Status
9
9
 
10
+ from modal._runtime.execution_context import current_input_id
10
11
  from modal._utils.async_utils import (
11
12
  AsyncOrSyncIterable,
12
13
  aclosing,
@@ -28,7 +29,6 @@ from modal._utils.function_utils import (
28
29
  )
29
30
  from modal._utils.grpc_utils import retry_transient_errors
30
31
  from modal.config import logger
31
- from modal.execution_context import current_input_id
32
32
  from modal_proto import api_pb2
33
33
 
34
34
  if typing.TYPE_CHECKING:
modal/partial_function.py CHANGED
@@ -199,6 +199,7 @@ class _MethodDecoratorType:
199
199
  ...
200
200
 
201
201
 
202
+ # TODO(elias): fix support for coroutine type unwrapping for methods (static typing)
202
203
  def _method(
203
204
  _warn_parentheses_missing=None,
204
205
  *,
@@ -207,7 +208,6 @@ def _method(
207
208
  is_generator: Optional[bool] = None,
208
209
  keep_warm: Optional[int] = None, # Deprecated: Use keep_warm on @app.cls() instead
209
210
  ) -> _MethodDecoratorType:
210
- # TODO(elias): fix support for coroutine type unwrapping for methods (static typing)
211
211
  """Decorator for methods that should be transformed into a Modal Function registered against this class's App.
212
212
 
213
213
  **Usage:**
@@ -379,6 +379,11 @@ def _asgi_app(
379
379
  f"Modal will drop support for default parameters in a future release.",
380
380
  )
381
381
 
382
+ if inspect.iscoroutinefunction(raw_f):
383
+ raise InvalidError(
384
+ f"ASGI app function {raw_f.__name__} is an async function. Only sync Python functions are supported."
385
+ )
386
+
382
387
  if not wait_for_response:
383
388
  deprecation_error(
384
389
  (2024, 5, 13),
@@ -448,6 +453,11 @@ def _wsgi_app(
448
453
  f"Modal will drop support for default parameters in a future release.",
449
454
  )
450
455
 
456
+ if inspect.iscoroutinefunction(raw_f):
457
+ raise InvalidError(
458
+ f"WSGI app function {raw_f.__name__} is an async function. Only sync Python functions are supported."
459
+ )
460
+
451
461
  if not wait_for_response:
452
462
  deprecation_error(
453
463
  (2024, 5, 13),
modal/queue.py CHANGED
@@ -175,12 +175,6 @@ class _Queue(_Object, type_prefix="qu"):
175
175
 
176
176
  return _Queue._from_loader(_load, "Queue()", is_another_app=True, hydrate_lazily=True)
177
177
 
178
- @staticmethod
179
- def persisted(label: str, namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE, environment_name: Optional[str] = None):
180
- """mdmd:hidden"""
181
- message = "`Queue.persisted` is deprecated. Please use `Queue.from_name(name, create_if_missing=True)` instead."
182
- deprecation_error((2024, 3, 1), message)
183
-
184
178
  @staticmethod
185
179
  async def lookup(
186
180
  label: str,
modal/queue.pyi CHANGED
@@ -22,8 +22,6 @@ class _Queue(modal.object._Object):
22
22
  label: str, namespace=1, environment_name: typing.Optional[str] = None, create_if_missing: bool = False
23
23
  ) -> _Queue: ...
24
24
  @staticmethod
25
- def persisted(label: str, namespace=1, environment_name: typing.Optional[str] = None): ...
26
- @staticmethod
27
25
  async def lookup(
28
26
  label: str,
29
27
  namespace=1,
@@ -104,8 +102,6 @@ class Queue(modal.object.Object):
104
102
  def from_name(
105
103
  label: str, namespace=1, environment_name: typing.Optional[str] = None, create_if_missing: bool = False
106
104
  ) -> Queue: ...
107
- @staticmethod
108
- def persisted(label: str, namespace=1, environment_name: typing.Optional[str] = None): ...
109
105
 
110
106
  class __lookup_spec(typing_extensions.Protocol):
111
107
  def __call__(
modal/runner.py CHANGED
@@ -15,6 +15,7 @@ from modal_proto import api_pb2
15
15
 
16
16
  from ._pty import get_pty_info
17
17
  from ._resolver import Resolver
18
+ from ._runtime.execution_context import is_local
18
19
  from ._traceback import traceback_contains_remote_call
19
20
  from ._utils.async_utils import TaskContext, gather_cancel_on_exc, synchronize_api
20
21
  from ._utils.grpc_utils import retry_transient_errors
@@ -30,7 +31,6 @@ from .exception import (
30
31
  _CliUserExecutionError,
31
32
  deprecation_error,
32
33
  )
33
- from .execution_context import is_local
34
34
  from .functions import _Function
35
35
  from .object import _get_environment_name, _Object
36
36
  from .output import _get_output_manager, enable_output
modal/sandbox.py CHANGED
@@ -148,7 +148,7 @@ class _Sandbox(_Object, type_prefix="sb"):
148
148
  definition = api_pb2.Sandbox(
149
149
  entrypoint_args=entrypoint_args,
150
150
  image_id=image.object_id,
151
- mount_ids=[mount.object_id for mount in mounts],
151
+ mount_ids=[mount.object_id for mount in mounts] + [mount.object_id for mount in image._mount_layers],
152
152
  secret_ids=[secret.object_id for secret in secrets],
153
153
  timeout_secs=timeout,
154
154
  workdir=workdir,
modal/secret.py CHANGED
@@ -7,12 +7,12 @@ from grpclib import GRPCError, Status
7
7
  from modal_proto import api_pb2
8
8
 
9
9
  from ._resolver import Resolver
10
+ from ._runtime.execution_context import is_local
10
11
  from ._utils.async_utils import synchronize_api
11
12
  from ._utils.grpc_utils import retry_transient_errors
12
13
  from ._utils.name_utils import check_object_name
13
14
  from .client import _Client
14
15
  from .exception import InvalidError, NotFoundError
15
- from .execution_context import is_local
16
16
  from .object import _get_environment_name, _Object
17
17
 
18
18
  ENV_DICT_WRONG_TYPE_ERR = "the env_dict argument to Secret has to be a dict[str, Union[str, None]]"
modal/volume.py CHANGED
@@ -79,15 +79,6 @@ class FileEntry:
79
79
  size=proto.size,
80
80
  )
81
81
 
82
- def __getattr__(self, name: str):
83
- deprecation_error(
84
- (2024, 4, 15),
85
- (
86
- f"The FileEntry dataclass was introduced to replace a private Protobuf message. "
87
- f"This dataclass does not have the {name} attribute."
88
- ),
89
- )
90
-
91
82
 
92
83
  class _Volume(_Object, type_prefix="vo"):
93
84
  """A writeable volume that can be used to share files between one or more Modal functions.
@@ -222,19 +213,6 @@ class _Volume(_Object, type_prefix="vo"):
222
213
  tc.infinite_loop(lambda: client.stub.VolumeHeartbeat(request), sleep=_heartbeat_sleep)
223
214
  yield cls._new_hydrated(response.volume_id, client, None, is_another_app=True)
224
215
 
225
- @staticmethod
226
- def persisted(
227
- label: str,
228
- namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
229
- environment_name: Optional[str] = None,
230
- cloud: Optional[str] = None,
231
- ):
232
- """mdmd:hidden"""
233
- message = (
234
- "`Volume.persisted` is deprecated. Please use `Volume.from_name(name, create_if_missing=True)` instead."
235
- )
236
- deprecation_error((2024, 3, 1), message)
237
-
238
216
  @staticmethod
239
217
  async def lookup(
240
218
  label: str,
modal/volume.pyi CHANGED
@@ -25,7 +25,6 @@ class FileEntry:
25
25
 
26
26
  @classmethod
27
27
  def _from_proto(cls, proto: modal_proto.api_pb2.FileEntry) -> FileEntry: ...
28
- def __getattr__(self, name: str): ...
29
28
  def __init__(self, path: str, type: FileEntryType, mtime: int, size: int) -> None: ...
30
29
  def __repr__(self): ...
31
30
  def __eq__(self, other): ...
@@ -56,10 +55,6 @@ class _Volume(modal.object._Object):
56
55
  _heartbeat_sleep: float = 300,
57
56
  ) -> typing.AsyncContextManager[_Volume]: ...
58
57
  @staticmethod
59
- def persisted(
60
- label: str, namespace=1, environment_name: typing.Optional[str] = None, cloud: typing.Optional[str] = None
61
- ): ...
62
- @staticmethod
63
58
  async def lookup(
64
59
  label: str,
65
60
  namespace=1,
@@ -149,10 +144,6 @@ class Volume(modal.object.Object):
149
144
  version: typing.Optional[int] = None,
150
145
  _heartbeat_sleep: float = 300,
151
146
  ) -> synchronicity.combined_types.AsyncAndBlockingContextManager[Volume]: ...
152
- @staticmethod
153
- def persisted(
154
- label: str, namespace=1, environment_name: typing.Optional[str] = None, cloud: typing.Optional[str] = None
155
- ): ...
156
147
 
157
148
  class __lookup_spec(typing_extensions.Protocol):
158
149
  def __call__(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.66.14
3
+ Version: 0.66.39
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -15,7 +15,6 @@ Requires-Python: >=3.9
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
17
  Requires-Dist: aiohttp
18
- Requires-Dist: aiostream (~=0.5.2)
19
18
  Requires-Dist: certifi
20
19
  Requires-Dist: click (>=8.1.0)
21
20
  Requires-Dist: fastapi
@@ -1,11 +1,8 @@
1
- modal/__init__.py,sha256=V-xEZVEj11OEKwdPIPR-LPcIdBD2R6njk-30oXH0nfI,2142
1
+ modal/__init__.py,sha256=Yn8zS7Jxl5uZjPM331Pc4FdSmp9Rt6VdE7TiE4ZKRc8,2151
2
2
  modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
3
- modal/_asgi.py,sha256=tlWuK4fMiUtXvZutCsJ9b4dgcwXmdffR0UeFNiBiKYc,19807
4
3
  modal/_clustered_functions.py,sha256=58spAmCbOk8eyjFKW-H21W-FGyYiJmfpEMK4BnTEUrk,2706
5
4
  modal/_clustered_functions.pyi,sha256=UQ7DHiQFI3A2Z8kC3gltNHJkQfvgvPuSbFsse9lSPkw,785
6
- modal/_container_entrypoint.py,sha256=BE0dWI_isrzVYEszwkIq6aK2sjsI9YW5pHqZCCvQbHc,41929
7
- modal/_container_io_manager.py,sha256=OvsrLcTbmRhkoiWpzowp73Ucal_afcZ7cdMmaulZTNg,44132
8
- modal/_container_io_manager.pyi,sha256=hBUcNQdXu2k9hZCIQlvxNRObH4CIHESgCmMRDhp7VUc,16448
5
+ modal/_container_entrypoint.py,sha256=T0Ql-oxgmj7PRVtdF4wYEGq-_a1ZACuCxe6u2XYj0nk,28671
9
6
  modal/_ipython.py,sha256=HF_DYy0e0qM9WnGDmTY30s1RxzGya9GeORCauCEpRaE,450
10
7
  modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
11
8
  modal/_output.py,sha256=SMaLrf1btBzHTV_tH5NzA8ZTWNJh5J0b31iG3sQU8_4,25494
@@ -13,17 +10,16 @@ modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
13
10
  modal/_pty.py,sha256=GhzrHKZpoI-YHMDN7LoySlSYLpoJ4yGPSF-fqiNsFrM,1336
14
11
  modal/_resolver.py,sha256=b8dHlCzQP7Xpagw5JfWdc1SqAQ5VbTaJmXnv3t-kX9k,6631
15
12
  modal/_resources.py,sha256=zTCcXvmG1erERnTvUcN0r4IjjwVEs4N8fs7OnkpvbJQ,1740
16
- modal/_serialization.py,sha256=145iYHp30jx1vtluOIroeWzcLkYdu56BU6wxzcWGqpM,18753
17
- modal/_telemetry.py,sha256=ERG0Zc2L4Eo8bDrvtVIxuQUA5yJV8ToJfZ9Ea9NbELA,5186
13
+ modal/_serialization.py,sha256=b1X44hDP7WDTX3iz3HrPyFJJz51a69luq5Tyhnm1fK0,18762
18
14
  modal/_traceback.py,sha256=1yNp1Dqq4qRIQp8idDp5PEqjwH4eA8MNI0FhFkCOFgo,4408
19
15
  modal/_tunnel.py,sha256=SVmQxGbV7dcLwyY9eB2PIWmXw8QQmcKg2ppTcRQgZrU,6283
20
16
  modal/_tunnel.pyi,sha256=SA_Q0UGB-D9skFjv6CqlTnCEWU67a2xJxfwVdXtar3Y,1259
21
17
  modal/_watcher.py,sha256=STlDe73R7IS33a_GMW2HnDc3hCDKLdsBfMxRpVh-flA,3581
22
- modal/app.py,sha256=sECTGUkkQceBdaaJG2TW3TKSyRQjxZL4UFBrJcgew9I,45869
18
+ modal/app.py,sha256=QEBK8qYSrux36oi3iS3msBQmcUOS1r4s2nengzzynjQ,44658
23
19
  modal/app.pyi,sha256=wHwBIDqkUb2CQzYVhxZafJ8xZ17TZ-8y-cRyOeZsEm0,25182
24
20
  modal/call_graph.py,sha256=l-Wi6vM8aosCdHTWegcCyGeVJGFdZ_fzlCmbRVPBXFI,2593
25
21
  modal/client.py,sha256=4SpWb4n0nolITR36kADZl1tYLOg6avukmzZU56UQjCo,16385
26
- modal/client.pyi,sha256=GrhvW-hZiYHBTTTNVIZAx7raao-mRyRkQV_VQz4PoZ8,7372
22
+ modal/client.pyi,sha256=Ei9L7Pu_SmAb5UB3r6E6GROF3HhJRCcsKYik5sMWG8s,7372
27
23
  modal/cloud_bucket_mount.py,sha256=eWQhCtMIczpokjfTZEgNBCGO_s5ft46PqTSLfKBykq4,5748
28
24
  modal/cloud_bucket_mount.pyi,sha256=tTF7M4FR9bTA30cFkz8qq3ZTlFL19NHU_36e_5GgAGA,1424
29
25
  modal/cls.py,sha256=Ci7EtMrLm1LExfjZ9K2IXyj-SV9Syq8dAbZCEfddcmY,24234
@@ -31,59 +27,63 @@ modal/cls.pyi,sha256=Dr4kgq8cj7YGRf9ayInuogOxs6yHim5_562Om8Avu14,8332
31
27
  modal/config.py,sha256=oVmvclQ2Qlt-VmL3wEp8DgDrnTPh_K5UBEYrSXv4C4s,10928
32
28
  modal/container_process.py,sha256=c_jBPtyPeSxbIcbLfs_FzTrt-1eErtRSnsfxkDozFoY,5589
33
29
  modal/container_process.pyi,sha256=k2kClwaSzz11eci1pzFZgCm-ptXapHAyHTOENorlazA,2594
34
- modal/dict.py,sha256=zZVE48RcysuY-FGZ1dPF-T9Dfjtax4htKuD4kwCLPpI,12905
35
- modal/dict.pyi,sha256=4ogy8Z6XNyZ1DLN1Tv9a3vN9LTeHoGSw8LoqwPyibNw,7449
30
+ modal/dict.py,sha256=axbUKiXhgOVvE1IrNMK3uHg3rp3N0Uji5elQNijnhH4,12571
31
+ modal/dict.pyi,sha256=4Rh5HNzXk99hotPUzoj1kYOHNlEgndZFfA-hlmBtBIc,7223
36
32
  modal/environments.py,sha256=KwKdrWfSnz2XF5eYXZyd0kdac1x1PVw2uxPYsGy8cys,6517
37
33
  modal/environments.pyi,sha256=oScvFAclF55-tL9UioLIL_SPBwgy_9O-BBvJ-PLbRgY,3542
38
34
  modal/exception.py,sha256=K-czk1oK8wFvK8snWrytXSByo2WNb9SJAlgBVPGWZBs,6417
39
- modal/execution_context.py,sha256=_p4Smxvc6Yoh9UgB5jahPS9nT2_YEhu0YV4FgvVt5Us,2723
40
- modal/execution_context.pyi,sha256=asokquy8hesti4l2IjbtyerSlgRJMjkaHDfwsAWk10I,616
41
- modal/experimental.py,sha256=Y8XmHBrPKLEz8SnykKht3nnO0sbM96vdotAj2KOU0rY,2297
42
- modal/functions.py,sha256=IfKuAHDIK1-wT8gLm14ee29l4IwXvOknlcFmEjuVicw,71709
43
- modal/functions.pyi,sha256=NNQ99RPpP9orbwigl5BaXWJtcvl6sEyjFapzCT3mjkY,24949
44
- modal/gpu.py,sha256=fAmMfh_GZpYwmNndWgDnU2snpFFaA1EeVQOHBEnRoVI,6682
45
- modal/image.py,sha256=40iKoSUrKtar1tT689zF1QuVaIcMmLsoU7rr1NCQbQ4,71798
46
- modal/image.pyi,sha256=tjZeFHmLP9bsX8rINg0dYZ8tz-xpFr5z04Wt0GRwc0E,22820
47
- modal/io_streams.py,sha256=KuhegFTht1EAFg7Bs7KRjqSG6vEWX2IfOulbye_CnjQ,13930
48
- modal/io_streams.pyi,sha256=2HpXVhUN3BPpHCBCj3XZTB3abjLv2sN9WKga6LePwEg,4228
49
- modal/mount.py,sha256=n_tsnv5c266GmEKewEvw7uxuz5HXcMkgSaD5ENjbybo,27607
35
+ modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
36
+ modal/functions.py,sha256=3iAonXDZ1OXgtUhL1LuTguNxlJi_PtGu-cBibd6Y464,71837
37
+ modal/functions.pyi,sha256=opYVDolZweBVZSfgT4t7OyQj4vBJ82B72IRoS8ZpoYw,24939
38
+ modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
39
+ modal/image.py,sha256=E6UVnhOdfkMnajiSpIm0iUEyE04yclkv9Y0BO6Vplrg,76043
40
+ modal/image.pyi,sha256=ZQpSN7XR16aug50sEcDE597CPssekeP1UZBtq0F1lRk,23847
41
+ modal/io_streams.py,sha256=kZ5o-aK0lPg4-NezYxpCFmjS2Vf_TbWn49S7c2xUQ6U,14255
42
+ modal/io_streams.pyi,sha256=pn6UnOjCUjQwukPYiHHdCv92CH9S9YRb_WekKGoPN94,4350
43
+ modal/mount.py,sha256=0BBp4aK2GABTwURlUO823IZ2eCODpz-SGuuNHs6-RUM,27733
50
44
  modal/mount.pyi,sha256=nywUmeUELLY2OEnAc1NNBHmSxuEylTWBzkh6nuXkkuc,9965
51
- modal/network_file_system.py,sha256=CRABD7SbJ9vFqDnY2e4DCXPBkX5LQS43zMeUTG_cbJg,15020
52
- modal/network_file_system.pyi,sha256=x-d3w2acvi5HUDJ7fjSi45DSpyioTa15FEC7StPMriI,7863
45
+ modal/network_file_system.py,sha256=P_LsILecyda1SRHU76Hk4Lq3M1HSx9shFJbaLThzw0U,14071
46
+ modal/network_file_system.pyi,sha256=XLyUnDx55ExbJcF_xlKxRax_r06XTvSsQh-a-_EyCOU,7239
53
47
  modal/object.py,sha256=zbRFZIt-Z3NQtgZPzlcEdy7u36ug4tKAuntYQBR3sDM,9625
54
48
  modal/object.pyi,sha256=cwWg93H4rBk9evt1itLZAZXH5wUMyTJBZ_ADazgfjGg,8465
55
49
  modal/output.py,sha256=FtPR7yvjZMgdSKD_KYkIcwYgCOiV9EKYjaj7K55Hjvg,1940
56
- modal/parallel_map.py,sha256=1t91swM63YFSLX_2KxV4dkXIzVPF-zK0IA59mI0Dl1Y,16043
50
+ modal/parallel_map.py,sha256=lf8Wer6FAf8-dYqPqoL45cz7FYDU66-TF-h5CO2Kf5Q,16052
57
51
  modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
58
- modal/partial_function.py,sha256=RNsdmgmQgE_lxDJPvtu6KgbF0NhxWMvwU4FLCiKIdG8,27786
52
+ modal/partial_function.py,sha256=1zAQZAxTaX8Nn7Rzm6fJ3mwybuVUF6OMQte76F0Vxz8,28206
59
53
  modal/partial_function.pyi,sha256=BqKN7It5QLxS2yhhhDX0RgI8EyNMPBD6Duk21kN_fvA,8908
60
54
  modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
61
55
  modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
62
56
  modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- modal/queue.py,sha256=9t56h-JQTV6lrgaSdoy7VjLD9wpbaRU1ZaxURuDyQBE,18674
64
- modal/queue.pyi,sha256=uDPnIe-DVEz0b6mRsfRIHQd9Py6rqaBu3A3Nex-DZL4,10225
57
+ modal/queue.py,sha256=qCBE-V2QRl_taSDUR5bDJL91J0A8xwbTxfEU3taA4Es,18338
58
+ modal/queue.pyi,sha256=t5yhDqXRtexy7AVraCexPyT6Xo3QA_H5OxVe_JLzTps,9999
65
59
  modal/retries.py,sha256=z4dYXdksUcjkefM3vGLkhCQ_m_TUPLJgC4uSYDzWSOU,3750
66
- modal/runner.py,sha256=fm7HGtdq4f8h_yo-XXKj3H9BA3y-OzDF5YZTGb9A2gs,23796
60
+ modal/runner.py,sha256=ZHHuPQ130pZzHdm8vOVQx6db4FiEg3SheDNyShVn9Jg,23805
67
61
  modal/runner.pyi,sha256=b2qoID4HO-ww6Q0jdboR9iCTxVWTzGiC2taIx7kA-U0,5135
68
62
  modal/running_app.py,sha256=AhWWCB16_k5R80oQxEVSNrmRq3fVInUCxtXKrAvcEPQ,566
69
- modal/sandbox.py,sha256=DL-UW4AJOJPm9Wqm5LDBSNjpREOc-DxHkdgp-68HIk0,24825
63
+ modal/sandbox.py,sha256=_7_sqTrEiC2zFo1XN7UCHA1L9NFXj6Kb6xu6Ecfancg,24878
70
64
  modal/sandbox.pyi,sha256=LIh3cIs9Wm0x2WBpyLqmlOvqJYB2806sO4JCIJRQOi4,17231
71
65
  modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
72
66
  modal/scheduler_placement.py,sha256=2B7CAR4UMUu5AtFVWgwVFDjkKtppwKY6ek7gD0jzBYI,1208
73
- modal/secret.py,sha256=WiPU6BrEv6M-cAvWd3jyPUJytqB0I8Vg3pN_DRZ4zj0,10010
67
+ modal/secret.py,sha256=d65hZF-CQCccEP_6H97gqsLQCUfRetnbycLysbNy6VE,10019
74
68
  modal/secret.pyi,sha256=lotQ8Z07jx9qP214K7LYU4spT9RGG7CWZcN3rwFIltU,3041
75
69
  modal/serving.py,sha256=h9JJ2Y4BHwkCPb70UNuwxTNKMfDzcgkgRlXIzKvx6T4,4433
76
70
  modal/serving.pyi,sha256=0KWUH5rdYnihSv1XB8bK9GokzpfzrCq8Sf6nYlUvQI8,1689
77
71
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
78
72
  modal/token_flow.py,sha256=lsVpJACut76AeJLw44vJKMSlpcqp8wcvxdUOoX6CIOc,6754
79
73
  modal/token_flow.pyi,sha256=qEYP7grgqSA440w7kBREU9Ezeo_NxCT67OciIPgDzcc,1958
80
- modal/volume.py,sha256=7T1Ckgg4KQp4ci9ZCaET6LeMDqQAim61PwdPT_uVAGQ,29644
81
- modal/volume.pyi,sha256=Uca9Ws9isk7zzPKo55oG3oGWh5ZK9LqjWYQznMaR8J8,11354
74
+ modal/volume.py,sha256=PfwXajTBuZdxwQv2lHRqzfchn39I77pRiC60Ga1EJo4,28914
75
+ modal/volume.pyi,sha256=JbeGYBda2mctzyK2psAen4nnfFB2v3jEB7S7Oyv_Vm0,10986
76
+ modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
77
+ modal/_runtime/asgi.py,sha256=WoAwIiGKpk089MOca3_iA73h36v0uBuoPx0-87ajIDY,19843
78
+ modal/_runtime/container_io_manager.py,sha256=_MEhwyCSYeCaPQnztPxkm0anRXa3CPcwIKi403N53uo,44120
79
+ modal/_runtime/execution_context.py,sha256=cXEVY4wEK-oZJVJptyj1ZplZvVQ1HDzFsyHxhaY4o8M,2718
80
+ modal/_runtime/telemetry.py,sha256=3NbrfwYH6mvDckzdTppymmda2lQKX2oHGc2JwdFZdUc,5191
81
+ modal/_runtime/user_code_imports.py,sha256=R06r4e5Dwmes0bgmHClotBN_vd5Etss8Ml4vVtfW8wI,14542
82
82
  modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
83
83
  modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
84
84
  modal/_utils/async_utils.py,sha256=3H4pBC4DW6rCA6hgRux6FMxGqPgHM-G-BTs7KXZiWz4,23958
85
85
  modal/_utils/blob_utils.py,sha256=pAY22w0oVc6ujGfI7La7HPUMOf42FehIapuhSDeeqEs,15835
86
- modal/_utils/function_utils.py,sha256=5GnYUiQ-WiRDEPt1H1_SFd0rZNJLWEXz7NrlMV5oV2E,23220
86
+ modal/_utils/function_utils.py,sha256=28mxgg_-7JF1DDiNnp3iNVsFQkOzMFjORsetdvZZTHU,24475
87
87
  modal/_utils/grpc_testing.py,sha256=PQyzEjHBveW7vdqu5Tpn-aNWPO5RPPcsRWzGvXDHCxY,7931
88
88
  modal/_utils/grpc_utils.py,sha256=tM1Q32VOU2WG733IfVHTLZdiyCe8Ga0f0Dx0iDLLy_8,7724
89
89
  modal/_utils/hash_utils.py,sha256=HefF7zPQPxFxyx3fpz-AdSm4QsHZNNvgL9-iQHY-_F4,1790
@@ -108,7 +108,7 @@ modal/cli/container.py,sha256=LGrF9iz8D3PGst6IUl0VB1Y1LJ0BWLrNRNFxWa4z-tg,3199
108
108
  modal/cli/dict.py,sha256=lIEl6uxygFt3omC-oF6tHUxnFjVhy4d0InC_kZrlkvM,4454
109
109
  modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
110
110
  modal/cli/environment.py,sha256=eq8Rixbo8u-nJPvtGwW4-I1lXZPnevsFEv65WlSxFXY,4362
111
- modal/cli/import_refs.py,sha256=Qk5jrX4ffrJZbT4H1I1y0jXkqfMLZ1pJhpyY6d5DihE,10616
111
+ modal/cli/import_refs.py,sha256=0sYZLcgcnor_CECq-7yX3WBs1W55nz5y65sbysxxKzY,9267
112
112
  modal/cli/launch.py,sha256=aY1fXxZyGn1Ih0lAzuAvzpXP6_OxvVCoZCgCIyV9Vos,2692
113
113
  modal/cli/network_file_system.py,sha256=p_o3wu8rh2tjHXJYrjaad__pD8hv93ypeDtfSY2fSEU,7527
114
114
  modal/cli/profile.py,sha256=s4jCYHwriOorEFCKxeGZoSWX8rXTR_hDTNFZhOA565s,3109
@@ -142,13 +142,13 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
142
142
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
143
143
  modal_global_objects/mounts/python_standalone.py,sha256=_vTEX3PECUsatzhDs8lyJmDK0LbFetT1sJB6MIDfFAo,1870
144
144
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
145
- modal_proto/api.proto,sha256=4CpsBW4cojfgGosMXXgB_8R5QjYChn_YqLRIKRU-704,77906
146
- modal_proto/api_grpc.py,sha256=Oic0aLG4XTLqmV3FeZCPzu7uYjQdOKGBA-p9VPUv9P0,99828
147
- modal_proto/api_pb2.py,sha256=OJVlZQMcNB39BUtOZhh20OyrKHtzI_-LGZvujxr-A7E,284710
148
- modal_proto/api_pb2.pyi,sha256=IkUTlCV4TEA01mCBZcil5X3Y4S7SobLwAaUWlUi1wNg,380405
149
- modal_proto/api_pb2_grpc.py,sha256=A2CXteL4pT6DtC98xvjHcqLF9vcC8JMy2w1xLdq0Qj8,215861
150
- modal_proto/api_pb2_grpc.pyi,sha256=ZH6Q9oHZ9JHIt9Or2NCXm0cMee1CW9zxHWjiiswwoW8,50356
151
- modal_proto/modal_api_grpc.py,sha256=Jql4aM9MRTLfwwwsG2TyIXXbMbIeIKS4YhpXjsrL4ws,13354
145
+ modal_proto/api.proto,sha256=5MPLgs49i-i_BcP19GyOUJ7hcpWuoegTKkjXJG0Eujg,77352
146
+ modal_proto/api_grpc.py,sha256=S7h8xe-msb3-Q8oSd7DUoB46z-dcRhsXGb6LjFCLNFI,99013
147
+ modal_proto/api_pb2.py,sha256=I8lNXEGFRHCPfpozfs2-7aVIG9edTokoJYv-wjYcmpg,282733
148
+ modal_proto/api_pb2.pyi,sha256=q6T8rJYt-V4UQ_Dr8xuqUMwJCMjs-iC1rHhycZrHUpo,377728
149
+ modal_proto/api_pb2_grpc.py,sha256=g7EfCSir3xStPPjJOU2U668zz6cGdN6u7SxvTTwU9aU,214126
150
+ modal_proto/api_pb2_grpc.pyi,sha256=9GhLZVRm69Qhyj_jmGqEGv1rD37Tzj6E6hGzKV08u48,49961
151
+ modal_proto/modal_api_grpc.py,sha256=en48QTR5fwA7x0twtlsqLKRjjDEAKVoh6EeSznQfQ3U,13236
152
152
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
153
153
  modal_proto/options.proto,sha256=a-siq4swVbZPfaFRXAipRZzGP2bq8OsdUvjlyzAeodQ,488
154
154
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -159,10 +159,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
159
159
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
160
  modal_version/__init__.py,sha256=UnAuHBPuPSstqgdCOx0SBVdfhpeJnMlY_oxEbu44Izg,470
161
161
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
162
- modal_version/_version_generated.py,sha256=LWpjQmESA6e_zY5QQesT5h0Vhc267xNWwlw2kXcI54E,149
163
- modal-0.66.14.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
164
- modal-0.66.14.dist-info/METADATA,sha256=A-gVdW_bwXNwNXc6IqXhZj-J3i9kQjp_FfFMHurLuuM,2364
165
- modal-0.66.14.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
166
- modal-0.66.14.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
167
- modal-0.66.14.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
168
- modal-0.66.14.dist-info/RECORD,,
162
+ modal_version/_version_generated.py,sha256=j1V8Em7PkypU_C92aeQH09lcTrvTj7EoeGH3SVtpfko,149
163
+ modal-0.66.39.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
164
+ modal-0.66.39.dist-info/METADATA,sha256=FSsdTyIIgZRS1iFneAJ15DH63G6YD8m0WcPScqiI6x8,2329
165
+ modal-0.66.39.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
166
+ modal-0.66.39.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
167
+ modal-0.66.39.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
168
+ modal-0.66.39.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -152,12 +152,6 @@ enum GPUType {
152
152
  GPU_TYPE_L40S = 11;
153
153
  }
154
154
 
155
- enum InstrumentationType {
156
- INSTRUMENTATION_TYPE_UNSPECIFIED = 0;
157
- INSTRUMENTATION_TYPE_METRICS = 1;
158
- INSTRUMENTATION_TYPE_TRACE = 2;
159
- }
160
-
161
155
  enum ObjectCreationType {
162
156
  OBJECT_CREATION_TYPE_UNSPECIFIED = 0; // just lookup
163
157
  OBJECT_CREATION_TYPE_CREATE_IF_MISSING = 1;
@@ -244,13 +238,6 @@ enum TaskState {
244
238
  TASK_STATE_LOADING_CHECKPOINT_IMAGE = 11;
245
239
  }
246
240
 
247
- // Encoding type used for user telemetry data.
248
- enum TelemetryEncodingType {
249
- TELEMETRY_ENCODING_TYPE_UNSPECIFIED = 0;
250
- TELEMETRY_ENCODING_TYPE_PROTOBUF = 1;
251
- TELEMETRY_ENCODING_TYPE_JSON = 2;
252
- }
253
-
254
241
  enum VolumeFsVersion {
255
242
  VOLUME_FS_VERSION_UNSPECIFIED = 0;
256
243
  VOLUME_FS_VERSION_V1 = 1;
@@ -427,7 +414,7 @@ message AppSetObjectsRequest {
427
414
  string client_id = 3;
428
415
  repeated string unindexed_object_ids = 4;
429
416
  AppState new_app_state = 5; // promotes an app from initializing to this new state
430
- string single_object_id = 6;
417
+ reserved 6;
431
418
  }
432
419
 
433
420
  message AppStopRequest {
@@ -1580,12 +1567,6 @@ message FunctionPutOutputsRequest {
1580
1567
  double requested_at = 5; // Used for waypoints.
1581
1568
  }
1582
1569
 
1583
- message FunctionPutUserTelemetryRequest {
1584
- bytes data = 1;
1585
- TelemetryEncodingType encoding_type = 2;
1586
- InstrumentationType instrumentation_type = 3;
1587
- }
1588
-
1589
1570
  message FunctionRetryInputsItem {
1590
1571
  string input_jwt = 1;
1591
1572
  FunctionInput input = 2;
@@ -1773,6 +1754,7 @@ message MethodDefinition {
1773
1754
  WebhookConfig webhook_config = 3;
1774
1755
  string web_url = 4;
1775
1756
  WebUrlInfo web_url_info = 5;
1757
+ repeated CustomDomainInfo custom_domain_info = 6;
1776
1758
  }
1777
1759
 
1778
1760
  message MountFile {
@@ -2725,7 +2707,6 @@ service ModalClient {
2725
2707
  rpc FunctionPrecreate(FunctionPrecreateRequest) returns (FunctionPrecreateResponse);
2726
2708
  rpc FunctionPutInputs(FunctionPutInputsRequest) returns (FunctionPutInputsResponse);
2727
2709
  rpc FunctionPutOutputs(FunctionPutOutputsRequest) returns (google.protobuf.Empty); // For containers to return result
2728
- rpc FunctionPutUserTelemetry(FunctionPutUserTelemetryRequest) returns (google.protobuf.Empty);
2729
2710
  rpc FunctionRetryInputs(FunctionRetryInputsRequest) returns (FunctionRetryInputsResponse);
2730
2711
  rpc FunctionStartPtyShell(google.protobuf.Empty) returns (google.protobuf.Empty);
2731
2712
  rpc FunctionUpdateSchedulingParams(FunctionUpdateSchedulingParamsRequest) returns (FunctionUpdateSchedulingParamsResponse);
modal_proto/api_grpc.py CHANGED
@@ -285,10 +285,6 @@ class ModalClientBase(abc.ABC):
285
285
  async def FunctionPutOutputs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionPutOutputsRequest, google.protobuf.empty_pb2.Empty]') -> None:
286
286
  pass
287
287
 
288
- @abc.abstractmethod
289
- async def FunctionPutUserTelemetry(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionPutUserTelemetryRequest, google.protobuf.empty_pb2.Empty]') -> None:
290
- pass
291
-
292
288
  @abc.abstractmethod
293
289
  async def FunctionRetryInputs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionRetryInputsRequest, modal_proto.api_pb2.FunctionRetryInputsResponse]') -> None:
294
290
  pass
@@ -941,12 +937,6 @@ class ModalClientBase(abc.ABC):
941
937
  modal_proto.api_pb2.FunctionPutOutputsRequest,
942
938
  google.protobuf.empty_pb2.Empty,
943
939
  ),
944
- '/modal.client.ModalClient/FunctionPutUserTelemetry': grpclib.const.Handler(
945
- self.FunctionPutUserTelemetry,
946
- grpclib.const.Cardinality.UNARY_UNARY,
947
- modal_proto.api_pb2.FunctionPutUserTelemetryRequest,
948
- google.protobuf.empty_pb2.Empty,
949
- ),
950
940
  '/modal.client.ModalClient/FunctionRetryInputs': grpclib.const.Handler(
951
941
  self.FunctionRetryInputs,
952
942
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1727,12 +1717,6 @@ class ModalClientStub:
1727
1717
  modal_proto.api_pb2.FunctionPutOutputsRequest,
1728
1718
  google.protobuf.empty_pb2.Empty,
1729
1719
  )
1730
- self.FunctionPutUserTelemetry = grpclib.client.UnaryUnaryMethod(
1731
- channel,
1732
- '/modal.client.ModalClient/FunctionPutUserTelemetry',
1733
- modal_proto.api_pb2.FunctionPutUserTelemetryRequest,
1734
- google.protobuf.empty_pb2.Empty,
1735
- )
1736
1720
  self.FunctionRetryInputs = grpclib.client.UnaryUnaryMethod(
1737
1721
  channel,
1738
1722
  '/modal.client.ModalClient/FunctionRetryInputs',