modal 0.73.0__py3-none-any.whl → 0.73.2__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.
@@ -373,7 +373,7 @@ def call_lifecycle_functions(
373
373
  """Call function(s), can be sync or async, but any return values are ignored."""
374
374
  with container_io_manager.handle_user_exception():
375
375
  for func in funcs:
376
- # We are deprecating parameterized exit methods but want to gracefully handle old code.
376
+ # We are deprecating parametrized exit methods but want to gracefully handle old code.
377
377
  # We can remove this once the deprecation in the actual @exit decorator is enforced.
378
378
  args = (None, None, None) if callable_has_non_self_params(func) else ()
379
379
  # in case func is non-async, it's executed here and sigint will by default
@@ -289,8 +289,8 @@ class FunctionInfo:
289
289
  if not _use_annotation_parameters(self.user_cls):
290
290
  return api_pb2.ClassParameterInfo(format=api_pb2.ClassParameterInfo.PARAM_SERIALIZATION_FORMAT_PICKLE)
291
291
 
292
- # annotation parameters trigger strictly typed parameterization
293
- # which enables web endpoint for parameterized classes
292
+ # annotation parameters trigger strictly typed parametrization
293
+ # which enables web endpoint for parametrized classes
294
294
 
295
295
  modal_parameters: list[api_pb2.ClassParameterSpec] = []
296
296
  signature = _get_class_constructor_signature(self.user_cls)
@@ -597,7 +597,7 @@ def _get_bases(typ):
597
597
  if "__orig_bases__" in getattr(typ, "__dict__", {}):
598
598
  # For generic types (see PEP 560)
599
599
  # Note that simply checking `hasattr(typ, '__orig_bases__')` is not
600
- # correct. Subclasses of a fully-parameterized generic class does not
600
+ # correct. Subclasses of a fully-parametrized generic class does not
601
601
  # have `__orig_bases__` defined, but `hasattr(typ, '__orig_bases__')`
602
602
  # will return True because it's defined in the base class.
603
603
  bases_attr = "__orig_bases__"
modal/cli/import_refs.py CHANGED
@@ -109,6 +109,14 @@ class CLICommand:
109
109
  names: list[str]
110
110
  runnable: Runnable
111
111
  is_web_endpoint: bool
112
+ priority: int
113
+
114
+
115
+ class AutoRunPriority:
116
+ MODULE_LOCAL_ENTRYPOINT = 0
117
+ MODULE_FUNCTION = 1
118
+ APP_LOCAL_ENTRYPOINT = 2
119
+ APP_FUNCTION = 3
112
120
 
113
121
 
114
122
  def list_cli_commands(
@@ -127,17 +135,21 @@ def list_cli_commands(
127
135
  apps = cast(list[tuple[str, App]], inspect.getmembers(module, lambda x: isinstance(x, App)))
128
136
 
129
137
  all_runnables: dict[Runnable, list[str]] = defaultdict(list)
138
+ priorities: dict[Runnable, int] = defaultdict(lambda: AutoRunPriority.APP_FUNCTION)
130
139
  for app_name, app in apps:
131
140
  for name, local_entrypoint in app.registered_entrypoints.items():
132
141
  all_runnables[local_entrypoint].append(f"{app_name}.{name}")
142
+ priorities[local_entrypoint] = AutoRunPriority.APP_LOCAL_ENTRYPOINT
133
143
  for name, function in app.registered_functions.items():
134
144
  if name.endswith(".*"):
135
145
  continue
136
146
  all_runnables[function].append(f"{app_name}.{name}")
147
+ priorities[function] = AutoRunPriority.APP_FUNCTION
137
148
  for cls_name, cls in app.registered_classes.items():
138
149
  for method_name in cls._get_method_names():
139
150
  method_ref = MethodReference(cls, method_name)
140
151
  all_runnables[method_ref].append(f"{app_name}.{cls_name}.{method_name}")
152
+ priorities[method_ref] = AutoRunPriority.APP_FUNCTION
141
153
 
142
154
  # If any class or function is exported as a module level object, use that
143
155
  # as the preferred name by putting it first in the list
@@ -150,8 +162,13 @@ def list_cli_commands(
150
162
  for method_name in entity._get_method_names():
151
163
  method_ref = MethodReference(entity, method_name)
152
164
  all_runnables.setdefault(method_ref, []).insert(0, f"{name}.{method_name}")
153
- elif (isinstance(entity, Function) and entity._is_local()) or isinstance(entity, LocalEntrypoint):
165
+ priorities[method_ref] = AutoRunPriority.MODULE_FUNCTION
166
+ elif isinstance(entity, Function) and entity._is_local():
154
167
  all_runnables.setdefault(entity, []).insert(0, name)
168
+ priorities[entity] = AutoRunPriority.MODULE_FUNCTION
169
+ elif isinstance(entity, LocalEntrypoint):
170
+ all_runnables.setdefault(entity, []).insert(0, name)
171
+ priorities[entity] = AutoRunPriority.MODULE_LOCAL_ENTRYPOINT
155
172
 
156
173
  def _is_web_endpoint(runnable: Runnable) -> bool:
157
174
  if isinstance(runnable, Function) and runnable._is_web_endpoint():
@@ -164,7 +181,10 @@ def list_cli_commands(
164
181
 
165
182
  return False
166
183
 
167
- return [CLICommand(names, runnable, _is_web_endpoint(runnable)) for runnable, names in all_runnables.items()]
184
+ return [
185
+ CLICommand(names, runnable, _is_web_endpoint(runnable), priority=priorities[runnable])
186
+ for runnable, names in all_runnables.items()
187
+ ]
168
188
 
169
189
 
170
190
  def filter_cli_commands(
@@ -308,17 +328,19 @@ def import_and_filter(
308
328
  filtered_commands = filter_cli_commands(
309
329
  cli_commands, import_ref.object_path, accept_local_entrypoint, accept_webhook
310
330
  )
331
+
311
332
  all_usable_commands = filter_cli_commands(cli_commands, "", accept_local_entrypoint, accept_webhook)
312
333
 
313
- if len(filtered_commands) == 1:
314
- cli_command = filtered_commands[0]
315
- return cli_command.runnable, all_usable_commands
334
+ if filtered_commands:
335
+ # if there is a single command with "highest run prio" - use that
336
+ filtered_commands_by_prio = defaultdict(list)
337
+ for cmd in filtered_commands:
338
+ filtered_commands_by_prio[cmd.priority].append(cmd)
316
339
 
317
- # we are here if there is more than one matching function
318
- if accept_local_entrypoint:
319
- local_entrypoint_cmds = [cmd for cmd in filtered_commands if isinstance(cmd.runnable, LocalEntrypoint)]
320
- if len(local_entrypoint_cmds) == 1:
321
- # if there is a single local entrypoint - use that
322
- return local_entrypoint_cmds[0].runnable, all_usable_commands
340
+ _, highest_prio_commands = min(filtered_commands_by_prio.items())
341
+ if len(highest_prio_commands) == 1:
342
+ cli_command = highest_prio_commands[0]
343
+ return cli_command.runnable, all_usable_commands
323
344
 
345
+ # otherwise, just return the list of all commands
324
346
  return None, all_usable_commands
modal/client.pyi CHANGED
@@ -27,7 +27,7 @@ class _Client:
27
27
  _snapshotted: bool
28
28
 
29
29
  def __init__(
30
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.0"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.2"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
@@ -85,7 +85,7 @@ class Client:
85
85
  _snapshotted: bool
86
86
 
87
87
  def __init__(
88
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.0"
88
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.2"
89
89
  ): ...
90
90
  def is_closed(self) -> bool: ...
91
91
  @property
modal/cls.py CHANGED
@@ -75,7 +75,7 @@ def _bind_instance_method(service_function: _Function, class_bound_method: _Func
75
75
  """Binds an "instance service function" to a specific method name.
76
76
  This "dummy" _Function gets no unique object_id and isn't backend-backed at the moment, since all
77
77
  it does it forward invocations to the underlying instance_service_function with the specified method,
78
- and we don't support web_config for parameterized methods at the moment.
78
+ and we don't support web_config for parametrized methods at the moment.
79
79
  """
80
80
  # TODO(elias): refactor to not use `_from_loader()` as a crutch for lazy-loading the
81
81
  # underlying instance_service_function. It's currently used in order to take advantage
@@ -90,7 +90,7 @@ def _bind_instance_method(service_function: _Function, class_bound_method: _Func
90
90
  method_placeholder_fun._web_url = (
91
91
  class_bound_method._web_url
92
92
  ) # TODO: this shouldn't be set when actual parameters are used
93
- method_placeholder_fun._function_name = f"{class_bound_method._function_name}[parameterized]"
93
+ method_placeholder_fun._function_name = f"{class_bound_method._function_name}[parametrized]"
94
94
  method_placeholder_fun._is_generator = class_bound_method._is_generator
95
95
  method_placeholder_fun._cluster_size = class_bound_method._cluster_size
96
96
  method_placeholder_fun._use_method_name = method_name
@@ -98,7 +98,7 @@ def _bind_instance_method(service_function: _Function, class_bound_method: _Func
98
98
 
99
99
  async def _load(fun: "_Function", resolver: Resolver, existing_object_id: Optional[str]):
100
100
  # there is currently no actual loading logic executed to create each method on
101
- # the *parameterized* instance of a class - it uses the parameter-bound service-function
101
+ # the *parametrized* instance of a class - it uses the parameter-bound service-function
102
102
  # for the instance. This load method just makes sure to set all attributes after the
103
103
  # `service_function` has been loaded (it's in the `_deps`)
104
104
  hydrate_from_instance_service_function(fun)
modal/functions.py CHANGED
@@ -960,7 +960,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
960
960
  identity = f"{parent.info.function_name} class service function"
961
961
  except Exception:
962
962
  # Can't always look up the function name that way, so fall back to generic message
963
- identity = "class service function for a parameterized class"
963
+ identity = "class service function for a parametrized class"
964
964
  if not parent.is_hydrated:
965
965
  if parent.app._running_app is None:
966
966
  reason = ", because the App it is defined on is not running"
modal/functions.pyi CHANGED
@@ -471,11 +471,11 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
471
471
 
472
472
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
473
473
 
474
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
474
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
475
475
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
476
476
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
477
477
 
478
- remote: __remote_spec[P, ReturnType, typing_extensions.Self]
478
+ remote: __remote_spec[ReturnType, P, typing_extensions.Self]
479
479
 
480
480
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
481
481
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -488,17 +488,17 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
488
488
  def _get_obj(self) -> typing.Optional[modal.cls.Obj]: ...
489
489
  def local(self, *args: P.args, **kwargs: P.kwargs) -> OriginalReturnType: ...
490
490
 
491
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
491
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
492
492
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
493
493
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
494
494
 
495
- _experimental_spawn: ___experimental_spawn_spec[P, ReturnType, typing_extensions.Self]
495
+ _experimental_spawn: ___experimental_spawn_spec[ReturnType, P, typing_extensions.Self]
496
496
 
497
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
497
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
498
498
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
499
499
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
500
500
 
501
- spawn: __spawn_spec[P, ReturnType, typing_extensions.Self]
501
+ spawn: __spawn_spec[ReturnType, P, typing_extensions.Self]
502
502
 
503
503
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
504
504
 
modal/partial_function.py CHANGED
@@ -614,7 +614,7 @@ ExitHandlerType = Union[
614
614
  # synchronicity type stubs would strip Awaitable so we use Any for now
615
615
  # Original, __exit__ style method signature (now deprecated)
616
616
  Callable[[Any, Optional[type[BaseException]], Optional[BaseException], Any], Any],
617
- # Forward-looking unparameterized method
617
+ # Forward-looking unparametrized method
618
618
  Callable[[Any], Any],
619
619
  ]
620
620
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.73.0
3
+ Version: 0.73.2
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -2,7 +2,7 @@ modal/__init__.py,sha256=df6aKAigSPFXnmIohWySf_1zZ9Gzgrb7-oprSbopD4w,2299
2
2
  modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
3
3
  modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
4
4
  modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
5
- modal/_container_entrypoint.py,sha256=iHSNqLCTK4uXzcmhF5ou5AqOYovk4hMfV3BZYYDrFKc,29554
5
+ modal/_container_entrypoint.py,sha256=qahIuJvaMmWG85N5vNS1yuAQ9XZoo1ftzfatkos_q7I,29553
6
6
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
7
7
  modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
8
8
  modal/_object.py,sha256=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
@@ -20,10 +20,10 @@ modal/app.py,sha256=BEl90AuVlcrVlXKhM0wDFn1E8hewvbia9Qdq6SiT-FE,44225
20
20
  modal/app.pyi,sha256=NnUpnKq5y5fM45F5cXLMZK5zVJZA9T_UKawloOXCVXE,25858
21
21
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
22
22
  modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
23
- modal/client.pyi,sha256=zrgKN8G3exCslhD6GQkTjD8tddibnNtFRMx6ZiHnyhU,7591
23
+ modal/client.pyi,sha256=FvwjAiLmNZM1wrVrCIuXxlm3PeZiQ3I980lWvf9yfnI,7591
24
24
  modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
25
25
  modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
26
- modal/cls.py,sha256=7k3_FwhPUzewRXRZP8bcVJA9AZstoxGJuHKQ5Db-YoY,32683
26
+ modal/cls.py,sha256=DLgFTEAWUlIdhqOoF3cb1yzru3FiVpFTvEnPuwD5AQI,32680
27
27
  modal/cls.pyi,sha256=LIoQrf96E2eZXTsO-o87jf2ppGAnYwQ8nVxsDmx7QHs,9040
28
28
  modal/config.py,sha256=BzhZYUUwOmvVwf6x5kf0ywMC257s648dmuhsnB6g3gk,11041
29
29
  modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
@@ -38,8 +38,8 @@ modal/experimental.pyi,sha256=24tIYu_w9RLwFrz1cIsgYuqmDCtV8eg6-bQNz3zjhDo,939
38
38
  modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
39
39
  modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
40
40
  modal/file_pattern_matcher.py,sha256=1cZ4V2wSLiaXqAqStETSwp3bzDD6QZOt6pmmjk3Okz4,6505
41
- modal/functions.py,sha256=bD4NbWgAfo5jsiqlT5XT0nGTaQ_6zOfyNmwYu0I-aVY,69951
42
- modal/functions.pyi,sha256=j6FWZzwFVSaxyOy4zcmCwz2wlAhWeuzqsjndNKt7VlA,26641
41
+ modal/functions.py,sha256=SCdDaPKzG6xZAXjzulXMENyfFD11Tq1KgefqqC_ADJY,69950
42
+ modal/functions.pyi,sha256=eHwUCC7wt_DkCWDnNKuL8LBc4JIRm-rzCOtdmdUgGKY,26641
43
43
  modal/gpu.py,sha256=2qZMNnoMrjU-5Bu7fx68pANUAKTtZq0EWEEeBA9OUVQ,7426
44
44
  modal/image.py,sha256=c6-RsdVDCscmfOoZI26gj8GvBBw1oVC18n8WaYKBWAw,90949
45
45
  modal/image.pyi,sha256=QMKS6E3CsZr5DoyNqGpcJPBYJTJZSvtAQIsAhPVd_E4,26347
@@ -54,7 +54,7 @@ modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
54
54
  modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
55
55
  modal/parallel_map.py,sha256=POBTyiWabe2e4qBNlsjjksiu1AAPEsNqI-mM8cgNFco,16042
56
56
  modal/parallel_map.pyi,sha256=0ltjcIpPUqPGGOWmHqzCfBu5y3ISjRZDrqOJhiNhfYk,2522
57
- modal/partial_function.py,sha256=4_hGVCCX-dYdjs_86Metfsuih8YyypiVMrExcwRGDS8,28711
57
+ modal/partial_function.py,sha256=_rPSY8glSN-pAdMfIfcfo2GE9rrydzDTrYUQGBVmXi0,28710
58
58
  modal/partial_function.pyi,sha256=Dj4WDxbGkXjxAbucSBSqr2_vrNbEWEAwdXnMzh2d80Y,9905
59
59
  modal/proxy.py,sha256=NrOevrWxG3G7-zlyRzG6BcIvop7AWLeyahZxitbBaOk,1418
60
60
  modal/proxy.pyi,sha256=1OEKIVUyC-xb7fHMzngakQso0nTsK60TVhXtlcMj6Wk,390
@@ -93,7 +93,7 @@ modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14
93
93
  modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
94
94
  modal/_utils/deprecation.py,sha256=dycySRBxyZf3ITzEqPNM6MxXTk9-0VVLA8oCPQ5j_Os,3426
95
95
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
96
- modal/_utils/function_utils.py,sha256=QAQQXPhSZVPkGgbgStFp3lDCB0jnvlcwKki1N3tSSWQ,27187
96
+ modal/_utils/function_utils.py,sha256=ue15TIvHiSSuuLQaGb3gJ5YmxdaFBhfE3Rt5frqIWhM,27185
97
97
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
98
98
  modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
99
99
  modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
@@ -107,7 +107,7 @@ modal/_utils/rand_pb_testing.py,sha256=mmVPk1rZldHwHZx0DnHTuHQlRLAiiAYdxjwEJpxvT
107
107
  modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
108
108
  modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
109
109
  modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
110
- modal/_vendor/cloudpickle.py,sha256=Loq12qo7PBNbE4LFVEW6BdMMwY10MG94EOW1SCpcnQ0,55217
110
+ modal/_vendor/cloudpickle.py,sha256=avxOIgNKqL9KyPNuIOVQzBm0D1l9ipeB4RrcUMUGmeQ,55216
111
111
  modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
112
112
  modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
113
113
  modal/cli/_download.py,sha256=t6BXZwjTd9MgznDvbsV8rp0FZWggdzC-lUAGZU4xx1g,3984
@@ -118,7 +118,7 @@ modal/cli/container.py,sha256=FYwEgjf93j4NMorAjGbSV98i1wpebqdAeNU1wfrFp1k,3668
118
118
  modal/cli/dict.py,sha256=8Wq3w-UDaywk8EVNdj-ECCNV9TYHqh4kzhUqhhulatM,4593
119
119
  modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
120
120
  modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
121
- modal/cli/import_refs.py,sha256=T10EjBn-7gP-Nv5jTZyd3fEAV7zCaaLtW8eJ4Zt80Mk,11865
121
+ modal/cli/import_refs.py,sha256=YYseLJ6cU_wln7DjVWfKPgEhv77hxfA0klWAkTK_1HA,12672
122
122
  modal/cli/launch.py,sha256=pzQt2QlcrbIUU0MVzWWPAvMQ6MCyqsHZ0X9JcV-sY04,3242
123
123
  modal/cli/network_file_system.py,sha256=eq3JnwjbfFNsJodIyANHL06ByYc3BSavzdmu8C96cHA,7948
124
124
  modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
@@ -169,10 +169,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
169
169
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
170
  modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
171
171
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
172
- modal_version/_version_generated.py,sha256=Yxiko82vGjUn9KsvIwjuM1GwRICvG_28r-6MWuHV0-Q,148
173
- modal-0.73.0.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
174
- modal-0.73.0.dist-info/METADATA,sha256=TmKeZvOba2fFzlrg4VGPHQ7nr4tLVPOB_SSmTLxWjsE,2328
175
- modal-0.73.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
176
- modal-0.73.0.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
177
- modal-0.73.0.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
178
- modal-0.73.0.dist-info/RECORD,,
172
+ modal_version/_version_generated.py,sha256=C7SCtsGrjUfPyAf7v_S93_caxnusk8RliITZG0S9S48,148
173
+ modal-0.73.2.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
174
+ modal-0.73.2.dist-info/METADATA,sha256=fOtBQBc1qAuX2n9IN_MM4OPe4JkuIW0b5QyDHJlJQ4M,2328
175
+ modal-0.73.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
176
+ modal-0.73.2.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
177
+ modal-0.73.2.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
178
+ modal-0.73.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
 
3
3
  # Note: Reset this value to -1 whenever you make a minor `0.X` release of the client.
4
- build_number = 0 # git: 7858ac1
4
+ build_number = 2 # git: 84b4545
File without changes