modal 1.0.6.dev59__py3-none-any.whl → 1.0.6.dev61__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
@@ -47,12 +47,10 @@ from ._utils.function_utils import (
47
47
  OUTPUTS_TIMEOUT,
48
48
  FunctionCreationStatus,
49
49
  FunctionInfo,
50
- IncludeSourceMode,
51
50
  _create_input,
52
51
  _process_result,
53
52
  _stream_function_call_data,
54
53
  get_function_type,
55
- get_include_source_mode,
56
54
  is_async,
57
55
  )
58
56
  from ._utils.grpc_utils import RetryWarningMessage, retry_transient_errors
@@ -598,8 +596,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
598
596
  rdma: Optional[bool] = None,
599
597
  max_inputs: Optional[int] = None,
600
598
  ephemeral_disk: Optional[int] = None,
601
- # current default: first-party, future default: main-package
602
- include_source: Optional[bool] = None,
599
+ include_source: bool = True,
603
600
  experimental_options: Optional[dict[str, str]] = None,
604
601
  _experimental_proxy_ip: Optional[str] = None,
605
602
  _experimental_custom_scaling_factor: Optional[float] = None,
@@ -624,15 +621,10 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
624
621
  assert not webhook_config
625
622
  assert not schedule
626
623
 
627
- include_source_mode = get_include_source_mode(include_source)
628
- if include_source_mode != IncludeSourceMode.INCLUDE_NOTHING:
629
- entrypoint_mounts = info.get_entrypoint_mount()
630
- else:
631
- entrypoint_mounts = {}
632
-
624
+ entrypoint_mount = info.get_entrypoint_mount() if include_source else {}
633
625
  all_mounts = [
634
626
  _get_client_mount(),
635
- *entrypoint_mounts.values(),
627
+ *entrypoint_mount.values(),
636
628
  ]
637
629
 
638
630
  retry_policy = _parse_retries(
@@ -1,6 +1,5 @@
1
1
  # Copyright Modal Labs 2022
2
2
  import asyncio
3
- import enum
4
3
  import inspect
5
4
  import os
6
5
  from collections.abc import AsyncGenerator
@@ -660,30 +659,3 @@ class FunctionCreationStatus:
660
659
  f"Custom domain for {method_definition.function_name} => [magenta underline]"
661
660
  f"{custom_domain.url}[/magenta underline]"
662
661
  )
663
-
664
-
665
- class IncludeSourceMode(enum.Enum):
666
- INCLUDE_NOTHING = False # can only be set in source, can't be set in config
667
- INCLUDE_MAIN_PACKAGE = True # Default behavior
668
-
669
-
670
- def get_include_source_mode(function_or_app_specific) -> IncludeSourceMode:
671
- """Which "automount" behavior should a function use
672
-
673
- function_or_app_specific: explicit value given in the @function or @cls decorator, in an App constructor, or None
674
-
675
- If function_or_app_specific is specified, validate and return the IncludeSourceMode
676
- If function_or_app_specific is None, infer it from config
677
- """
678
- if function_or_app_specific is not None:
679
- if not isinstance(function_or_app_specific, bool):
680
- raise ValueError(
681
- f"Invalid `include_source` value: {function_or_app_specific}. Use one of:\n"
682
- f"True - include function's package source\n"
683
- f"False - include no Python source (module expected to be present in Image)\n"
684
- )
685
-
686
- # explicitly set in app/function
687
- return IncludeSourceMode(function_or_app_specific)
688
-
689
- return IncludeSourceMode.INCLUDE_MAIN_PACKAGE
modal/app.py CHANGED
@@ -171,10 +171,10 @@ class _App:
171
171
  self,
172
172
  name: Optional[str] = None,
173
173
  *,
174
- image: Optional[_Image] = None, # default image for all functions (default is `modal.Image.debian_slim()`)
175
- secrets: Sequence[_Secret] = [], # default secrets for all functions
176
- volumes: dict[Union[str, PurePosixPath], _Volume] = {}, # default volumes for all functions
177
- include_source: Optional[bool] = None,
174
+ image: Optional[_Image] = None, # Default Image for the App (otherwise default to `modal.Image.debian_slim()`)
175
+ secrets: Sequence[_Secret] = [], # Secrets to add for all Functions in the App
176
+ volumes: dict[Union[str, PurePosixPath], _Volume] = {}, # Volume mounts to use for all Functions
177
+ include_source: bool = True, # Default configuration for adding Function source file(s) to the Modal container
178
178
  ) -> None:
179
179
  """Construct a new app, optionally with default image, mounts, secrets, or volumes.
180
180
 
@@ -655,8 +655,9 @@ class _App:
655
655
  # With `max_inputs = 1`, containers will be single-use.
656
656
  max_inputs: Optional[int] = None,
657
657
  i6pn: Optional[bool] = None, # Whether to enable IPv6 container networking within the region.
658
- # Whether the function's home package should be included in the image - defaults to True
659
- include_source: Optional[bool] = None, # When `False`, don't automatically add the App source to the container.
658
+ # Whether the file or directory containing the Function's source should automatically be included
659
+ # in the container. When unset, falls back to the App-level configuration, or is otherwise True by default.
660
+ include_source: Optional[bool] = None,
660
661
  experimental_options: Optional[dict[str, Any]] = None,
661
662
  # Parameters below here are experimental. Use with caution!
662
663
  _experimental_scheduler_placement: Optional[
@@ -670,8 +671,8 @@ class _App:
670
671
  concurrency_limit: Optional[int] = None, # Replaced with `max_containers`
671
672
  container_idle_timeout: Optional[int] = None, # Replaced with `scaledown_window`
672
673
  allow_concurrent_inputs: Optional[int] = None, # Replaced with the `@modal.concurrent` decorator
673
- _experimental_buffer_containers: Optional[int] = None, # Now stable API with `buffer_containers`
674
674
  allow_cross_region_volumes: Optional[bool] = None, # Always True on the Modal backend now
675
+ _experimental_buffer_containers: Optional[int] = None, # Now stable API with `buffer_containers`
675
676
  ) -> _FunctionDecoratorType:
676
677
  """Decorator to register a new Modal Function with this App."""
677
678
  if isinstance(_warn_parentheses_missing, _Image):
modal/app.pyi CHANGED
@@ -129,7 +129,7 @@ class _App:
129
129
  image: typing.Optional[modal.image._Image] = None,
130
130
  secrets: collections.abc.Sequence[modal.secret._Secret] = [],
131
131
  volumes: dict[typing.Union[str, pathlib.PurePosixPath], modal.volume._Volume] = {},
132
- include_source: typing.Optional[bool] = None,
132
+ include_source: bool = True,
133
133
  ) -> None:
134
134
  """Construct a new app, optionally with default image, mounts, secrets, or volumes.
135
135
 
@@ -430,8 +430,8 @@ class _App:
430
430
  concurrency_limit: typing.Optional[int] = None,
431
431
  container_idle_timeout: typing.Optional[int] = None,
432
432
  allow_concurrent_inputs: typing.Optional[int] = None,
433
- _experimental_buffer_containers: typing.Optional[int] = None,
434
433
  allow_cross_region_volumes: typing.Optional[bool] = None,
434
+ _experimental_buffer_containers: typing.Optional[int] = None,
435
435
  ) -> _FunctionDecoratorType:
436
436
  """Decorator to register a new Modal Function with this App."""
437
437
  ...
@@ -591,7 +591,7 @@ class App:
591
591
  image: typing.Optional[modal.image.Image] = None,
592
592
  secrets: collections.abc.Sequence[modal.secret.Secret] = [],
593
593
  volumes: dict[typing.Union[str, pathlib.PurePosixPath], modal.volume.Volume] = {},
594
- include_source: typing.Optional[bool] = None,
594
+ include_source: bool = True,
595
595
  ) -> None:
596
596
  """Construct a new app, optionally with default image, mounts, secrets, or volumes.
597
597
 
@@ -1035,8 +1035,8 @@ class App:
1035
1035
  concurrency_limit: typing.Optional[int] = None,
1036
1036
  container_idle_timeout: typing.Optional[int] = None,
1037
1037
  allow_concurrent_inputs: typing.Optional[int] = None,
1038
- _experimental_buffer_containers: typing.Optional[int] = None,
1039
1038
  allow_cross_region_volumes: typing.Optional[bool] = None,
1039
+ _experimental_buffer_containers: typing.Optional[int] = None,
1040
1040
  ) -> _FunctionDecoratorType:
1041
1041
  """Decorator to register a new Modal Function with this App."""
1042
1042
  ...
modal/client.pyi CHANGED
@@ -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.0.6.dev59",
36
+ version: str = "1.0.6.dev61",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -163,7 +163,7 @@ class Client:
163
163
  server_url: str,
164
164
  client_type: int,
165
165
  credentials: typing.Optional[tuple[str, str]],
166
- version: str = "1.0.6.dev59",
166
+ version: str = "1.0.6.dev61",
167
167
  ):
168
168
  """mdmd:hidden
169
169
  The Modal client object is not intended to be instantiated directly by users.
modal/functions.pyi CHANGED
@@ -105,7 +105,7 @@ class Function(
105
105
  rdma: typing.Optional[bool] = None,
106
106
  max_inputs: typing.Optional[int] = None,
107
107
  ephemeral_disk: typing.Optional[int] = None,
108
- include_source: typing.Optional[bool] = None,
108
+ include_source: bool = True,
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,
@@ -428,7 +428,7 @@ class Function(
428
428
 
429
429
  _call_generator: ___call_generator_spec[typing_extensions.Self]
430
430
 
431
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
431
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
432
432
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
433
433
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
434
434
  ...
@@ -437,7 +437,7 @@ class Function(
437
437
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
438
438
  ...
439
439
 
440
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
440
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
441
441
 
442
442
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
443
443
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -464,7 +464,7 @@ class Function(
464
464
  """
465
465
  ...
466
466
 
467
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
467
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
468
468
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
469
469
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
470
470
 
@@ -488,7 +488,7 @@ class Function(
488
488
  ...
489
489
 
490
490
  _experimental_spawn: ___experimental_spawn_spec[
491
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
491
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
492
492
  ]
493
493
 
494
494
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -497,7 +497,7 @@ class Function(
497
497
 
498
498
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
499
499
 
500
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
500
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
501
501
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
502
502
  """Calls the function with the given arguments, without waiting for the results.
503
503
 
@@ -518,7 +518,7 @@ class Function(
518
518
  """
519
519
  ...
520
520
 
521
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
521
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
522
522
 
523
523
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
524
524
  """Return the inner Python object wrapped by this Modal Function."""
modal/image.py CHANGED
@@ -1157,6 +1157,8 @@ class _Image(_Object, type_prefix="im"):
1157
1157
  - Python is on the `$PATH` and dependencies are installed with the first Python on the `$PATH`.
1158
1158
  - Shell supports backticks for substitution
1159
1159
  - `which` command is on the `$PATH`
1160
+
1161
+ Added in v1.1.0.
1160
1162
  """
1161
1163
  pkgs = _flatten_str_args("uv_pip_install", "packages", packages)
1162
1164
 
@@ -1347,6 +1349,8 @@ class _Image(_Object, type_prefix="im"):
1347
1349
  ```python
1348
1350
  image = modal.Image.debian_slim().uv_sync()
1349
1351
  ```
1352
+
1353
+ Added in v1.1.0.
1350
1354
  """
1351
1355
 
1352
1356
  def _normalize_items(items, name) -> list[str]:
@@ -2091,23 +2095,24 @@ class _Image(_Object, type_prefix="im"):
2091
2095
  raw_f: Callable[..., Any],
2092
2096
  *,
2093
2097
  secrets: Sequence[_Secret] = (), # Optional Modal Secret objects with environment variables for the container
2094
- gpu: Union[GPU_T, list[GPU_T]] = None, # Requested GPU or or list of acceptable GPUs( e.g. ["A10", "A100"])
2095
2098
  volumes: dict[Union[str, PurePosixPath], Union[_Volume, _CloudBucketMount]] = {}, # Volume mount paths
2096
2099
  network_file_systems: dict[Union[str, PurePosixPath], _NetworkFileSystem] = {}, # NFS mount paths
2100
+ gpu: Union[GPU_T, list[GPU_T]] = None, # Requested GPU or or list of acceptable GPUs( e.g. ["A10", "A100"])
2097
2101
  cpu: Optional[float] = None, # How many CPU cores to request. This is a soft limit.
2098
2102
  memory: Optional[int] = None, # How much memory to request, in MiB. This is a soft limit.
2099
2103
  timeout: Optional[int] = 60 * 60, # Maximum execution time of the function in seconds.
2100
- force_build: bool = False, # Ignore cached builds, similar to 'docker build --no-cache'
2101
2104
  cloud: Optional[str] = None, # Cloud provider to run the function on. Possible values are aws, gcp, oci, auto.
2102
2105
  region: Optional[Union[str, Sequence[str]]] = None, # Region or regions to run the function on.
2106
+ force_build: bool = False, # Ignore cached builds, similar to 'docker build --no-cache'
2103
2107
  args: Sequence[Any] = (), # Positional arguments to the function.
2104
2108
  kwargs: dict[str, Any] = {}, # Keyword arguments to the function.
2105
- include_source: Optional[bool] = None,
2109
+ include_source: bool = True, # Whether the builder container should have the Function's source added
2106
2110
  ) -> "_Image":
2107
- """Run user-defined function `raw_f` as an image build step. The function runs just like an ordinary Modal
2108
- function, and any kwargs accepted by `@app.function` (such as `Mount`s, `NetworkFileSystem`s,
2109
- and resource requests) can be supplied to it.
2110
- After it finishes execution, a snapshot of the resulting container file system is saved as an image.
2111
+ """Run user-defined function `raw_f` as an image build step.
2112
+
2113
+ The function runs like an ordinary Modal Function, accepting a resource configuration and integrating
2114
+ with Modal features like Secrets and Volumes. Unlike ordinary Modal Functions, any changes to the
2115
+ filesystem state will be captured on container exit and saved as a new Image.
2111
2116
 
2112
2117
  **Note**
2113
2118
 
modal/image.pyi CHANGED
@@ -470,6 +470,8 @@ class _Image(modal._object._Object):
470
470
  - Python is on the `$PATH` and dependencies are installed with the first Python on the `$PATH`.
471
471
  - Shell supports backticks for substitution
472
472
  - `which` command is on the `$PATH`
473
+
474
+ Added in v1.1.0.
473
475
  """
474
476
  ...
475
477
 
@@ -521,6 +523,8 @@ class _Image(modal._object._Object):
521
523
  ```python
522
524
  image = modal.Image.debian_slim().uv_sync()
523
525
  ```
526
+
527
+ Added in v1.1.0.
524
528
  """
525
529
  ...
526
530
 
@@ -829,7 +833,6 @@ class _Image(modal._object._Object):
829
833
  raw_f: collections.abc.Callable[..., typing.Any],
830
834
  *,
831
835
  secrets: collections.abc.Sequence[modal.secret._Secret] = (),
832
- gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
833
836
  volumes: dict[
834
837
  typing.Union[str, pathlib.PurePosixPath],
835
838
  typing.Union[modal.volume._Volume, modal.cloud_bucket_mount._CloudBucketMount],
@@ -837,20 +840,22 @@ class _Image(modal._object._Object):
837
840
  network_file_systems: dict[
838
841
  typing.Union[str, pathlib.PurePosixPath], modal.network_file_system._NetworkFileSystem
839
842
  ] = {},
843
+ gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
840
844
  cpu: typing.Optional[float] = None,
841
845
  memory: typing.Optional[int] = None,
842
846
  timeout: typing.Optional[int] = 3600,
843
- force_build: bool = False,
844
847
  cloud: typing.Optional[str] = None,
845
848
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
849
+ force_build: bool = False,
846
850
  args: collections.abc.Sequence[typing.Any] = (),
847
851
  kwargs: dict[str, typing.Any] = {},
848
- include_source: typing.Optional[bool] = None,
852
+ include_source: bool = True,
849
853
  ) -> _Image:
850
- """Run user-defined function `raw_f` as an image build step. The function runs just like an ordinary Modal
851
- function, and any kwargs accepted by `@app.function` (such as `Mount`s, `NetworkFileSystem`s,
852
- and resource requests) can be supplied to it.
853
- After it finishes execution, a snapshot of the resulting container file system is saved as an image.
854
+ """Run user-defined function `raw_f` as an image build step.
855
+
856
+ The function runs like an ordinary Modal Function, accepting a resource configuration and integrating
857
+ with Modal features like Secrets and Volumes. Unlike ordinary Modal Functions, any changes to the
858
+ filesystem state will be captured on container exit and saved as a new Image.
854
859
 
855
860
  **Note**
856
861
 
@@ -1305,6 +1310,8 @@ class Image(modal.object.Object):
1305
1310
  - Python is on the `$PATH` and dependencies are installed with the first Python on the `$PATH`.
1306
1311
  - Shell supports backticks for substitution
1307
1312
  - `which` command is on the `$PATH`
1313
+
1314
+ Added in v1.1.0.
1308
1315
  """
1309
1316
  ...
1310
1317
 
@@ -1356,6 +1363,8 @@ class Image(modal.object.Object):
1356
1363
  ```python
1357
1364
  image = modal.Image.debian_slim().uv_sync()
1358
1365
  ```
1366
+
1367
+ Added in v1.1.0.
1359
1368
  """
1360
1369
  ...
1361
1370
 
@@ -1664,7 +1673,6 @@ class Image(modal.object.Object):
1664
1673
  raw_f: collections.abc.Callable[..., typing.Any],
1665
1674
  *,
1666
1675
  secrets: collections.abc.Sequence[modal.secret.Secret] = (),
1667
- gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
1668
1676
  volumes: dict[
1669
1677
  typing.Union[str, pathlib.PurePosixPath],
1670
1678
  typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
@@ -1672,20 +1680,22 @@ class Image(modal.object.Object):
1672
1680
  network_file_systems: dict[
1673
1681
  typing.Union[str, pathlib.PurePosixPath], modal.network_file_system.NetworkFileSystem
1674
1682
  ] = {},
1683
+ gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
1675
1684
  cpu: typing.Optional[float] = None,
1676
1685
  memory: typing.Optional[int] = None,
1677
1686
  timeout: typing.Optional[int] = 3600,
1678
- force_build: bool = False,
1679
1687
  cloud: typing.Optional[str] = None,
1680
1688
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1689
+ force_build: bool = False,
1681
1690
  args: collections.abc.Sequence[typing.Any] = (),
1682
1691
  kwargs: dict[str, typing.Any] = {},
1683
- include_source: typing.Optional[bool] = None,
1692
+ include_source: bool = True,
1684
1693
  ) -> Image:
1685
- """Run user-defined function `raw_f` as an image build step. The function runs just like an ordinary Modal
1686
- function, and any kwargs accepted by `@app.function` (such as `Mount`s, `NetworkFileSystem`s,
1687
- and resource requests) can be supplied to it.
1688
- After it finishes execution, a snapshot of the resulting container file system is saved as an image.
1694
+ """Run user-defined function `raw_f` as an image build step.
1695
+
1696
+ The function runs like an ordinary Modal Function, accepting a resource configuration and integrating
1697
+ with Modal features like Secrets and Volumes. Unlike ordinary Modal Functions, any changes to the
1698
+ filesystem state will be captured on container exit and saved as a new Image.
1689
1699
 
1690
1700
  **Note**
1691
1701
 
modal/sandbox.py CHANGED
@@ -546,7 +546,10 @@ class _Sandbox(_Object, type_prefix="sb"):
546
546
  return self._tunnels
547
547
 
548
548
  async def reload_volumes(self) -> None:
549
- """Reload all Volumes mounted in the Sandbox."""
549
+ """Reload all Volumes mounted in the Sandbox.
550
+
551
+ Added in v1.1.0.
552
+ """
550
553
  task_id = await self._get_task_id()
551
554
  await retry_transient_errors(
552
555
  self._client.stub.ContainerReloadVolumes,
modal/sandbox.pyi CHANGED
@@ -188,7 +188,10 @@ class _Sandbox(modal._object._Object):
188
188
  ...
189
189
 
190
190
  async def reload_volumes(self) -> None:
191
- """Reload all Volumes mounted in the Sandbox."""
191
+ """Reload all Volumes mounted in the Sandbox.
192
+
193
+ Added in v1.1.0.
194
+ """
192
195
  ...
193
196
 
194
197
  async def terminate(self) -> None:
@@ -615,11 +618,17 @@ class Sandbox(modal.object.Object):
615
618
 
616
619
  class __reload_volumes_spec(typing_extensions.Protocol[SUPERSELF]):
617
620
  def __call__(self, /) -> None:
618
- """Reload all Volumes mounted in the Sandbox."""
621
+ """Reload all Volumes mounted in the Sandbox.
622
+
623
+ Added in v1.1.0.
624
+ """
619
625
  ...
620
626
 
621
627
  async def aio(self, /) -> None:
622
- """Reload all Volumes mounted in the Sandbox."""
628
+ """Reload all Volumes mounted in the Sandbox.
629
+
630
+ Added in v1.1.0.
631
+ """
623
632
  ...
624
633
 
625
634
  reload_volumes: __reload_volumes_spec[typing_extensions.Self]
modal/volume.py CHANGED
@@ -156,6 +156,8 @@ class _Volume(_Object, type_prefix="vo"):
156
156
 
157
157
  The Volume is mounted as a read-only volume in a function. Any file system write operation into the
158
158
  mounted volume will result in an error.
159
+
160
+ Added in v1.0.5.
159
161
  """
160
162
 
161
163
  async def _load(new_volume: _Volume, resolver: Resolver, existing_object_id: Optional[str]):
modal/volume.pyi CHANGED
@@ -121,6 +121,8 @@ class _Volume(modal._object._Object):
121
121
 
122
122
  The Volume is mounted as a read-only volume in a function. Any file system write operation into the
123
123
  mounted volume will result in an error.
124
+
125
+ Added in v1.0.5.
124
126
  """
125
127
  ...
126
128
 
@@ -417,6 +419,8 @@ class Volume(modal.object.Object):
417
419
 
418
420
  The Volume is mounted as a read-only volume in a function. Any file system write operation into the
419
421
  mounted volume will result in an error.
422
+
423
+ Added in v1.0.5.
420
424
  """
421
425
  ...
422
426
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.6.dev59
3
+ Version: 1.0.6.dev61
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
3
3
  modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
4
4
  modal/_clustered_functions.pyi,sha256=_QKM87tdYwcALSGth8a0-9qXl02fZK6zMfEGEoYz7eA,1007
5
5
  modal/_container_entrypoint.py,sha256=1qBMNY_E9ICC_sRCtillMxmKPsmxJl1J0_qOAG8rH-0,28288
6
- modal/_functions.py,sha256=zjtdBd41AzxshemfMrohAlfsMlyhPorjeyNde9gwF0k,81169
6
+ modal/_functions.py,sha256=sfE0cYRMGIr22zhCNGH2VBVLuuxQx4WNM7h1LqdTYNI,80869
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
9
9
  modal/_object.py,sha256=vzRWhAcFJDM8ZmiUSDgSj9gJhLZJA-wjLVvTl984N4A,11295
@@ -18,11 +18,11 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
18
18
  modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
19
19
  modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
20
20
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
21
- modal/app.py,sha256=cCgX6rYbEB__q2XoAF2OAeH--L0EM4XWZ820YWglKSQ,48134
22
- modal/app.pyi,sha256=cXiSTu2bwu6csAUdkOlh7mr9tPvtaS2qWSEhlC1UxAg,43787
21
+ modal/app.py,sha256=BBR2NmGzZbFGfhKAmtzllD0o4TbVDBbOEs0O2ysSdQo,48277
22
+ modal/app.pyi,sha256=h6JtBA6a7wobdZAuS3QuXrWCUZqfyKPuGV3XdjCqT3k,43753
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=pBSZ7lv5dezIL9U9H4tpE0Yz6qA1n0NoNbnJ3KCQMMA,18252
25
- modal/client.pyi,sha256=TAsUVP2Tsp7ip2tk01xZOoukvAkw7gyRV1ePqBIfPJU,15390
25
+ modal/client.pyi,sha256=IJcV98G7PkXHQXA1dW0kaBHPn421H7bpkdfSC8qUvOA,15390
26
26
  modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
27
27
  modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
28
28
  modal/cls.py,sha256=7A0xGnugQzm8dOfnKMjLjtqekRlRtQ0jPFRYgq6xdUM,40018
@@ -39,10 +39,10 @@ modal/file_io.py,sha256=BVqAJ0sgPUfN8QsYztWiGB4j56he60TncM02KsylnCw,21449
39
39
  modal/file_io.pyi,sha256=cPT_hsplE5iLCXhYOLn1Sp9eDdk7DxdFmicQHanJZyg,15918
40
40
  modal/file_pattern_matcher.py,sha256=urAue8es8jxqX94k9EYoZxxhtfgOlsEES8lbFHOorzc,7734
41
41
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
42
- modal/functions.pyi,sha256=FJe_91dSrMCRNVT-YV1UhtxFKzIvL_C5q8xdk08-wT8,34840
42
+ modal/functions.pyi,sha256=sht8252nY3f7y20vURdjz4R-NU0_EvHjHVl97PQ1t_4,34823
43
43
  modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
44
- modal/image.py,sha256=qTJ6pTcLfYRh112wId7CCNWWmm077w6JoIqxE8BiCoo,102261
45
- modal/image.pyi,sha256=TVy-rnSAP2WgQ5zf_sQLFzb-99Qg9LiQNGXR9psFA_o,68107
44
+ modal/image.py,sha256=0E3Tge4W3JLS-8dzFy1AVlkdccMhYs3TQkv5kQwv3G0,102368
45
+ modal/image.pyi,sha256=s_AQaFoWmjLzffJGmiedFf9K1qQkedVIlsC6vRtlKS8,68161
46
46
  modal/io_streams.py,sha256=ut9tY_yEtiBsgQ40u_72Ns87IZHfbMxfnh8t6U9RSGA,16204
47
47
  modal/io_streams.pyi,sha256=aOun_jUFKHSJyUY6-7gKvNoxzcULsa8_hxdtEO7v-gk,13980
48
48
  modal/mount.py,sha256=q-pPeVxAmte-G_LDpbFwaNs2Rb2MIpscfnCXzkhxrOI,36734
@@ -65,8 +65,8 @@ modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
65
65
  modal/runner.py,sha256=ostdzYpQb-20tlD6dIq7bpWTkZkOhjJBNuMNektqnJA,24068
66
66
  modal/runner.pyi,sha256=lbwLljm1cC8d6PcNvmYQhkE8501V9fg0bYqqKX6G4r4,8489
67
67
  modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
68
- modal/sandbox.py,sha256=77dRA1JTuohI4sONDMdpvDv8QGnQ-yd96baJmMyxEhg,37585
69
- modal/sandbox.pyi,sha256=hOcdNZ3j5MlPaNZ4NAnoc31BQ1fZqQrEBWnD3m7ZxJg,38392
68
+ modal/sandbox.py,sha256=5n4bM-a1i9ba_1r8UAMJRQv_kBu8XUzes_5PtRdEClQ,37620
69
+ modal/sandbox.pyi,sha256=xmXcfh24MAAneJFU_AEH-eaHfGRWET0LtjQeFr6Qcgs,38513
70
70
  modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
71
71
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
72
72
  modal/secret.py,sha256=bpgtv0urwaBOmmJpMTZIwVWUraQlpeu4hW8pbJiGcOA,10546
@@ -78,8 +78,8 @@ modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
78
78
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
79
79
  modal/token_flow.py,sha256=0_4KabXKsuE4OXTJ1OuLOtA-b1sesShztMZkkRFK7tA,7605
80
80
  modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
81
- modal/volume.py,sha256=4AcgWhqq-zgSbmX-Tx7u2oo1gPLW5mxfb_oZfVSzpQs,44449
82
- modal/volume.pyi,sha256=sjr67f0npiRzl2j3blrcMA_QSoogJAS0xLqWI06xWXQ,40727
81
+ modal/volume.py,sha256=aIGp_ZFD6UUqM2XnS19GBqWLc1_xOVBIx2JcFn30aYk,44475
82
+ modal/volume.pyi,sha256=Qo5D0Bojcp8J4t4OoRArrBFaC1MSvFf9jQIL9U6Qz2Q,40779
83
83
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
84
84
  modal/_runtime/asgi.py,sha256=_2xSTsDD27Cit7xnMs4lzkJA2wzer2_N4Oa3BkXFzVA,22521
85
85
  modal/_runtime/container_io_manager.py,sha256=hjkK4gke_A8_mULSfm3F1hZKR0C61lKbRUI8mHS-LGE,45464
@@ -97,7 +97,7 @@ modal/_utils/blob_utils.py,sha256=v2NAQVVGx1AQjHQ7-2T64x5rYtwjFFykxDXb-0grrzA,21
97
97
  modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
98
98
  modal/_utils/deprecation.py,sha256=-Bgg7jZdcJU8lROy18YyVnQYbM8hue-hVmwJqlWAGH0,5504
99
99
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
100
- modal/_utils/function_utils.py,sha256=fX_39dxVedYWhnZ1XgxqRhELFI0Pa5zZil6ijueLAzI,28171
100
+ modal/_utils/function_utils.py,sha256=mFdEKMAgMC_1jgnH9_-0N0DgIlrIlKO6bBeseWbM3TE,27026
101
101
  modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
102
102
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
103
103
  modal/_utils/grpc_utils.py,sha256=HBZdMcBHCk6uozILYTjGnR0mV8fg7WOdJldoyZ-ZhSg,10137
@@ -151,7 +151,7 @@ modal/requirements/2025.06.txt,sha256=KxDaVTOwatHvboDo4lorlgJ7-n-MfAwbPwxJ0zcJqr
151
151
  modal/requirements/PREVIEW.txt,sha256=KxDaVTOwatHvboDo4lorlgJ7-n-MfAwbPwxJ0zcJqrs,312
152
152
  modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
153
153
  modal/requirements/base-images.json,sha256=JYSDAgHTl-WrV_TZW5icY-IJEnbe2eQ4CZ_KN6EOZKU,1304
154
- modal-1.0.6.dev59.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
154
+ modal-1.0.6.dev61.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
155
155
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
156
156
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
157
157
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -174,10 +174,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
174
174
  modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
175
175
  modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
176
176
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
- modal_version/__init__.py,sha256=jYBjFPQBTRA_WaNo9NhlTwo_VSPBb15phQiBWkU1X6E,121
177
+ modal_version/__init__.py,sha256=YE4any51Y4tqwNuA5XgXJh6SIIK3WHXj4AdH_DEGMb0,121
178
178
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
179
- modal-1.0.6.dev59.dist-info/METADATA,sha256=L-giTWZRwgZjEmVrGqeamN00vK008XA90y2gKoBX1vw,2462
180
- modal-1.0.6.dev59.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
181
- modal-1.0.6.dev59.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
182
- modal-1.0.6.dev59.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
183
- modal-1.0.6.dev59.dist-info/RECORD,,
179
+ modal-1.0.6.dev61.dist-info/METADATA,sha256=YHPQDR5AI60UQZnbQRf2yNsUYo8cPDew3IeX4BmYFVQ,2462
180
+ modal-1.0.6.dev61.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
181
+ modal-1.0.6.dev61.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
182
+ modal-1.0.6.dev61.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
183
+ modal-1.0.6.dev61.dist-info/RECORD,,
modal_version/__init__.py CHANGED
@@ -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.0.6.dev59"
4
+ __version__ = "1.0.6.dev61"