modal 1.0.6.dev60__py3-none-any.whl → 1.1.0__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
@@ -29,11 +29,7 @@ class _Client:
29
29
  _snapshotted: bool
30
30
 
31
31
  def __init__(
32
- self,
33
- server_url: str,
34
- client_type: int,
35
- credentials: typing.Optional[tuple[str, str]],
36
- version: str = "1.0.6.dev60",
32
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "1.1.0"
37
33
  ):
38
34
  """mdmd:hidden
39
35
  The Modal client object is not intended to be instantiated directly by users.
@@ -159,11 +155,7 @@ class Client:
159
155
  _snapshotted: bool
160
156
 
161
157
  def __init__(
162
- self,
163
- server_url: str,
164
- client_type: int,
165
- credentials: typing.Optional[tuple[str, str]],
166
- version: str = "1.0.6.dev60",
158
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "1.1.0"
167
159
  ):
168
160
  """mdmd:hidden
169
161
  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[P_INNER, ReturnType_INNER, SUPERSELF]):
431
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_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.P, modal._functions.ReturnType, typing_extensions.Self]
440
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, 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[P_INNER, ReturnType_INNER, SUPERSELF]):
467
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_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.P, modal._functions.ReturnType, typing_extensions.Self
491
+ modal._functions.ReturnType, modal._functions.P, 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[P_INNER, ReturnType_INNER, SUPERSELF]):
500
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_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.P, modal._functions.ReturnType, typing_extensions.Self]
521
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, 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
@@ -2095,23 +2095,24 @@ class _Image(_Object, type_prefix="im"):
2095
2095
  raw_f: Callable[..., Any],
2096
2096
  *,
2097
2097
  secrets: Sequence[_Secret] = (), # Optional Modal Secret objects with environment variables for the container
2098
- gpu: Union[GPU_T, list[GPU_T]] = None, # Requested GPU or or list of acceptable GPUs( e.g. ["A10", "A100"])
2099
2098
  volumes: dict[Union[str, PurePosixPath], Union[_Volume, _CloudBucketMount]] = {}, # Volume mount paths
2100
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"])
2101
2101
  cpu: Optional[float] = None, # How many CPU cores to request. This is a soft limit.
2102
2102
  memory: Optional[int] = None, # How much memory to request, in MiB. This is a soft limit.
2103
2103
  timeout: Optional[int] = 60 * 60, # Maximum execution time of the function in seconds.
2104
- force_build: bool = False, # Ignore cached builds, similar to 'docker build --no-cache'
2105
2104
  cloud: Optional[str] = None, # Cloud provider to run the function on. Possible values are aws, gcp, oci, auto.
2106
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'
2107
2107
  args: Sequence[Any] = (), # Positional arguments to the function.
2108
2108
  kwargs: dict[str, Any] = {}, # Keyword arguments to the function.
2109
- include_source: Optional[bool] = None,
2109
+ include_source: bool = True, # Whether the builder container should have the Function's source added
2110
2110
  ) -> "_Image":
2111
- """Run user-defined function `raw_f` as an image build step. The function runs just like an ordinary Modal
2112
- function, and any kwargs accepted by `@app.function` (such as `Mount`s, `NetworkFileSystem`s,
2113
- and resource requests) can be supplied to it.
2114
- 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.
2115
2116
 
2116
2117
  **Note**
2117
2118
 
modal/image.pyi CHANGED
@@ -833,7 +833,6 @@ class _Image(modal._object._Object):
833
833
  raw_f: collections.abc.Callable[..., typing.Any],
834
834
  *,
835
835
  secrets: collections.abc.Sequence[modal.secret._Secret] = (),
836
- gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
837
836
  volumes: dict[
838
837
  typing.Union[str, pathlib.PurePosixPath],
839
838
  typing.Union[modal.volume._Volume, modal.cloud_bucket_mount._CloudBucketMount],
@@ -841,20 +840,22 @@ class _Image(modal._object._Object):
841
840
  network_file_systems: dict[
842
841
  typing.Union[str, pathlib.PurePosixPath], modal.network_file_system._NetworkFileSystem
843
842
  ] = {},
843
+ gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
844
844
  cpu: typing.Optional[float] = None,
845
845
  memory: typing.Optional[int] = None,
846
846
  timeout: typing.Optional[int] = 3600,
847
- force_build: bool = False,
848
847
  cloud: typing.Optional[str] = None,
849
848
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
849
+ force_build: bool = False,
850
850
  args: collections.abc.Sequence[typing.Any] = (),
851
851
  kwargs: dict[str, typing.Any] = {},
852
- include_source: typing.Optional[bool] = None,
852
+ include_source: bool = True,
853
853
  ) -> _Image:
854
- """Run user-defined function `raw_f` as an image build step. The function runs just like an ordinary Modal
855
- function, and any kwargs accepted by `@app.function` (such as `Mount`s, `NetworkFileSystem`s,
856
- and resource requests) can be supplied to it.
857
- 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.
858
859
 
859
860
  **Note**
860
861
 
@@ -1672,7 +1673,6 @@ class Image(modal.object.Object):
1672
1673
  raw_f: collections.abc.Callable[..., typing.Any],
1673
1674
  *,
1674
1675
  secrets: collections.abc.Sequence[modal.secret.Secret] = (),
1675
- gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
1676
1676
  volumes: dict[
1677
1677
  typing.Union[str, pathlib.PurePosixPath],
1678
1678
  typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
@@ -1680,20 +1680,22 @@ class Image(modal.object.Object):
1680
1680
  network_file_systems: dict[
1681
1681
  typing.Union[str, pathlib.PurePosixPath], modal.network_file_system.NetworkFileSystem
1682
1682
  ] = {},
1683
+ gpu: typing.Union[None, str, modal.gpu._GPUConfig, list[typing.Union[None, str, modal.gpu._GPUConfig]]] = None,
1683
1684
  cpu: typing.Optional[float] = None,
1684
1685
  memory: typing.Optional[int] = None,
1685
1686
  timeout: typing.Optional[int] = 3600,
1686
- force_build: bool = False,
1687
1687
  cloud: typing.Optional[str] = None,
1688
1688
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1689
+ force_build: bool = False,
1689
1690
  args: collections.abc.Sequence[typing.Any] = (),
1690
1691
  kwargs: dict[str, typing.Any] = {},
1691
- include_source: typing.Optional[bool] = None,
1692
+ include_source: bool = True,
1692
1693
  ) -> Image:
1693
- """Run user-defined function `raw_f` as an image build step. The function runs just like an ordinary Modal
1694
- function, and any kwargs accepted by `@app.function` (such as `Mount`s, `NetworkFileSystem`s,
1695
- and resource requests) can be supplied to it.
1696
- 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.
1697
1699
 
1698
1700
  **Note**
1699
1701
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.6.dev60
3
+ Version: 1.1.0
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=3Y6BPH6HQuy-IKHWv9aaYC5mqxWuOTklFWQkoFLUM0I,15390
25
+ modal/client.pyi,sha256=UwSZNckf6kTGpGiIaD44ks1yNyT0OsxVUOQs3urk0QA,15312
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=ffW_kkU8AxMuV77ltmjK3nslXW_2iwEjKsT-Cgd4Trs,34840
42
+ modal/functions.pyi,sha256=0P4f8ew79lf0lWXObYmNFxKoUPbWmoT0CD5IqGNKFhE,34823
43
43
  modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
44
- modal/image.py,sha256=yC2m2wfC0jGFN0lr07OJz17LCepDXNVqhRTgtv0OhvI,102313
45
- modal/image.pyi,sha256=uitnAuPMC3PPCXJX8kaw8Vt0e5bSqxt9j4vQx7DUBrY,68211
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
@@ -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.dev60.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
154
+ modal-1.1.0.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=7_DgQscRs6UtBKEdVgf6SwdElFpxGr9DcskyBhsawhI,121
177
+ modal_version/__init__.py,sha256=hU7TlfDHxR5rj9pTkD4VtycqGhdz_CB3t9PhPRlrILY,115
178
178
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
179
- modal-1.0.6.dev60.dist-info/METADATA,sha256=t2K7VNwJv0XYIqlyTAP-efO3cXHWkheu0UYTYAj8jHE,2462
180
- modal-1.0.6.dev60.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
181
- modal-1.0.6.dev60.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
182
- modal-1.0.6.dev60.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
183
- modal-1.0.6.dev60.dist-info/RECORD,,
179
+ modal-1.1.0.dist-info/METADATA,sha256=qa8Tqcp-zkCDwAahdRleh9Dyd3Dtw7ujW45xd3k4G9g,2456
180
+ modal-1.1.0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
181
+ modal-1.1.0.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
182
+ modal-1.1.0.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
183
+ modal-1.1.0.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.dev60"
4
+ __version__ = "1.1.0"