modal 1.1.5.dev75__py3-none-any.whl → 1.1.5.dev77__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.

Potentially problematic release.


This version of modal might be problematic. Click here for more details.

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.1.5.dev75",
36
+ version: str = "1.1.5.dev77",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -164,7 +164,7 @@ class Client:
164
164
  server_url: str,
165
165
  client_type: int,
166
166
  credentials: typing.Optional[tuple[str, str]],
167
- version: str = "1.1.5.dev75",
167
+ version: str = "1.1.5.dev77",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
modal/functions.pyi CHANGED
@@ -401,7 +401,7 @@ class Function(
401
401
 
402
402
  _call_generator: ___call_generator_spec[typing_extensions.Self]
403
403
 
404
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
404
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
405
405
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
406
406
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
407
407
  ...
@@ -410,7 +410,7 @@ class Function(
410
410
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
411
411
  ...
412
412
 
413
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
413
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
414
414
 
415
415
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
416
416
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -437,7 +437,7 @@ class Function(
437
437
  """
438
438
  ...
439
439
 
440
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
440
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
441
441
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
442
442
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
443
443
 
@@ -461,7 +461,7 @@ class Function(
461
461
  ...
462
462
 
463
463
  _experimental_spawn: ___experimental_spawn_spec[
464
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
464
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
465
465
  ]
466
466
 
467
467
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -470,7 +470,7 @@ class Function(
470
470
 
471
471
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
472
472
 
473
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
473
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
474
474
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
475
475
  """Calls the function with the given arguments, without waiting for the results.
476
476
 
@@ -491,7 +491,7 @@ class Function(
491
491
  """
492
492
  ...
493
493
 
494
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
494
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
495
495
 
496
496
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
497
497
  """Return the inner Python object wrapped by this Modal Function."""
modal/image.py CHANGED
@@ -1441,6 +1441,15 @@ class _Image(_Object, type_prefix="im"):
1441
1441
  The `pyproject.toml` and `uv.lock` in `uv_project_dir` are automatically added to the build context. The
1442
1442
  `uv_project_dir` is relative to the current working directory of where `modal` is called.
1443
1443
 
1444
+ NOTE: This does *not* install the project itself into the environment (this is equivalent to the
1445
+ `--no-install-project` flag in the `uv sync` command) and you would be expected to add any local python source
1446
+ files using `Image.add_local_python_source` or similar methods after this call.
1447
+
1448
+ This ensures that updates to your project code wouldn't require reinstalling third-party dependencies
1449
+ after every change.
1450
+
1451
+ uv workspaces are currently not supported.
1452
+
1444
1453
  Added in v1.1.0.
1445
1454
  """
1446
1455
 
modal/image.pyi CHANGED
@@ -587,6 +587,15 @@ class _Image(modal._object._Object):
587
587
  The `pyproject.toml` and `uv.lock` in `uv_project_dir` are automatically added to the build context. The
588
588
  `uv_project_dir` is relative to the current working directory of where `modal` is called.
589
589
 
590
+ NOTE: This does *not* install the project itself into the environment (this is equivalent to the
591
+ `--no-install-project` flag in the `uv sync` command) and you would be expected to add any local python source
592
+ files using `Image.add_local_python_source` or similar methods after this call.
593
+
594
+ This ensures that updates to your project code wouldn't require reinstalling third-party dependencies
595
+ after every change.
596
+
597
+ uv workspaces are currently not supported.
598
+
590
599
  Added in v1.1.0.
591
600
  """
592
601
  ...
@@ -1558,6 +1567,15 @@ class Image(modal.object.Object):
1558
1567
  The `pyproject.toml` and `uv.lock` in `uv_project_dir` are automatically added to the build context. The
1559
1568
  `uv_project_dir` is relative to the current working directory of where `modal` is called.
1560
1569
 
1570
+ NOTE: This does *not* install the project itself into the environment (this is equivalent to the
1571
+ `--no-install-project` flag in the `uv sync` command) and you would be expected to add any local python source
1572
+ files using `Image.add_local_python_source` or similar methods after this call.
1573
+
1574
+ This ensures that updates to your project code wouldn't require reinstalling third-party dependencies
1575
+ after every change.
1576
+
1577
+ uv workspaces are currently not supported.
1578
+
1561
1579
  Added in v1.1.0.
1562
1580
  """
1563
1581
  ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev75
3
+ Version: 1.1.5.dev77
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -22,7 +22,7 @@ modal/app.py,sha256=zjRWTevpIIzAELw2O_xG9NJ-SkFRCcPpDUZ7msTrk7A,49097
22
22
  modal/app.pyi,sha256=4QyptueFsCNOq0veUh0kJEWxRThiEHjALJ-9kC4ig8g,44455
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
25
- modal/client.pyi,sha256=quGXgVMrx15OwyJO0mP4riYv6Vd5ScE-YKCeF89aZSs,15831
25
+ modal/client.pyi,sha256=A_chd3EwhK-AoDR9lrJFn9C32uAd2WoJflrVrh87gyw,15831
26
26
  modal/cloud_bucket_mount.py,sha256=I2GRXYhOWLIz2kJZjXu75jAm9EJkBNcutGc6jR2ReUw,5928
27
27
  modal/cloud_bucket_mount.pyi,sha256=VuUOipMIHqFXMkD-3g2bsoqpSxV5qswlFHDOqPQzYAo,7405
28
28
  modal/cls.py,sha256=IZG9gLlssbhTgIn6iSEmBSKkbbkst3skASMae-59FII,40239
@@ -39,10 +39,10 @@ modal/file_io.py,sha256=OSKr77TujcXGJW1iikzYiHckLSmv07QBgBHcxxYEkoI,21456
39
39
  modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
40
40
  modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
41
41
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
42
- modal/functions.pyi,sha256=Z6VuukLrjASAgf0kV9I6c09WvP_b2gCujX6f9j2bBaw,37988
42
+ modal/functions.pyi,sha256=CMwApS396tdElFrjnV6RuL2DTCz4C3jYzYoq1y_LPUQ,37988
43
43
  modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
44
- modal/image.py,sha256=MN5-pEmj-i66_XUxHo_z_VIu6KD186dF70417KKiRt0,106712
45
- modal/image.pyi,sha256=Ba7rdjbktmibwG9yLf3SMRWycw34V8SScG-Krakx1Yk,76506
44
+ modal/image.py,sha256=HDkOnhIAN8g63a8LTN4J5SjC9ciReFQQJIxTS2z5KFM,107216
45
+ modal/image.pyi,sha256=dMvMwAuvWkNN2BRYJFijkEy2m_xtEXgCKK0T7FVldsc,77514
46
46
  modal/io_streams.py,sha256=hZOVc5beOAm8S_VQQmmKUbk_BJ9OltN83RY0yMPqUDo,16545
47
47
  modal/io_streams.pyi,sha256=aOun_jUFKHSJyUY6-7gKvNoxzcULsa8_hxdtEO7v-gk,13980
48
48
  modal/mount.py,sha256=G7_xhQMZqokgfsaFLMch0YR3fs-OUNqYUm3f4jHTSMQ,33161
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=9gkVuDmu3m4TlKoU3MzEtTOemUSs8EEOWba40s7Aa0
153
153
  modal/experimental/flash.py,sha256=C4sef08rARYFllsgtqukFmYL18SZW0_JpMS0BejDcUs,28552
154
154
  modal/experimental/flash.pyi,sha256=vV_OQhtdrPn8SW0XrBK-aLLHHIvxAzLzwFbWrke-m74,15463
155
155
  modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
156
- modal-1.1.5.dev75.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
156
+ modal-1.1.5.dev77.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
157
157
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
158
158
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
159
159
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -161,13 +161,13 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
161
161
  modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
162
162
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
163
163
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
164
- modal_proto/api.proto,sha256=jZKRqVp3OpGAzwLy3-jpjLNQtNtwRnzRA4t3o50uLXw,110065
165
- modal_proto/api_grpc.py,sha256=9TqN2bHcV7ZEP60ldkVTC2o-K0jkTHKWslh2STXpNTY,133937
166
- modal_proto/api_pb2.py,sha256=GVp43WSNAk-DKOxqTRG-5AKntsMz8BLHv7SgKA6HQGQ,384208
167
- modal_proto/api_pb2.pyi,sha256=7cBXzbkeJ4tfIx_ezdFz7GipHLrAWniA-l4cgULEdHo,529383
168
- modal_proto/api_pb2_grpc.py,sha256=GCo6ufBw9V7qG29b3jCVSSoe4Xycts-CMPWBorXzcDg,288332
169
- modal_proto/api_pb2_grpc.pyi,sha256=EWqb1fKFaJvPj121E43vNHo2Q_fmk_M12KsD7blfnQU,67619
170
- modal_proto/modal_api_grpc.py,sha256=_hyeMTOf-DnSFWRo0n4tphZtswWuSB0-rnF9hmJFAKw,20190
164
+ modal_proto/api.proto,sha256=RXcYHmDFAfD0GlWgPwPii7loe_lARLvSpotcV40QvNA,110401
165
+ modal_proto/api_grpc.py,sha256=pzk7RpGmeK8oWkzcJVw1BzwT9L3zW8v6L5BXyml9Be8,135364
166
+ modal_proto/api_pb2.py,sha256=DtV1OlzbC1UuynUVmyTlAUQ4dLRq4nj5utFtF-C3oWo,387604
167
+ modal_proto/api_pb2.pyi,sha256=5qCe0VixKCd2TMSmtpgJuiF9pMbfP9ZLG76z7M5iN98,532059
168
+ modal_proto/api_pb2_grpc.py,sha256=KGm4HHBQsge8Ww3eSVr9KWbl1IPomf-l3qqbfXWrej0,291534
169
+ modal_proto/api_pb2_grpc.pyi,sha256=FVAP6dDZgGHVR3xP7ZxrUVQZLXY0PgT9EG3l2UXh10w,68311
170
+ modal_proto/modal_api_grpc.py,sha256=WDbmh9XNSXIsnQ3KePkDlclEHRQpeDtRBuBIdGsvvHU,20394
171
171
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
172
172
  modal_proto/options.proto,sha256=zp9h5r61ivsp0XwEWwNBsVqNTbRA1VSY_UtN7sEcHtE,549
173
173
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -182,10 +182,10 @@ modal_proto/sandbox_router_pb2.py,sha256=INd9izYaIYqllESQt4MSv2Rj9Hf5bMjAvtCc9b4
182
182
  modal_proto/sandbox_router_pb2.pyi,sha256=YCK0WnCgRos3-p7t4USQQ7x6WAuM278yeQX2IeU5mLg,13295
183
183
  modal_proto/sandbox_router_pb2_grpc.py,sha256=zonC5flvCwxeZYJPENj1IJo2Mr0J58DpoC1_8IdPYik,8243
184
184
  modal_proto/sandbox_router_pb2_grpc.pyi,sha256=4QgCB9b7_ykvH8YD-hfnogVH9CLyHVDC5QNb03l4_X8,2735
185
- modal_version/__init__.py,sha256=KCuzWmx96PWRqEEKHFU0igMK-pzgXJz6hDwOmyhmIys,121
185
+ modal_version/__init__.py,sha256=JE4P8flX0W_TOA9B7kyt3vpv-G3xzwi-ztMkzANXmuM,121
186
186
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
187
- modal-1.1.5.dev75.dist-info/METADATA,sha256=3Pg1n4NhwKZCGvZCUq77GgJivFFaosZl2MwM7AMyZ8k,2481
188
- modal-1.1.5.dev75.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
189
- modal-1.1.5.dev75.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
190
- modal-1.1.5.dev75.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
191
- modal-1.1.5.dev75.dist-info/RECORD,,
187
+ modal-1.1.5.dev77.dist-info/METADATA,sha256=3EW-K63Vcb9xTN1mPdouC0WaGJtwZFP7Z_3W7-0RpO0,2481
188
+ modal-1.1.5.dev77.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
189
+ modal-1.1.5.dev77.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
190
+ modal-1.1.5.dev77.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
191
+ modal-1.1.5.dev77.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -399,6 +399,14 @@ message AppGetOrCreateResponse {
399
399
  string app_id = 1;
400
400
  }
401
401
 
402
+ message AppGetTagsRequest {
403
+ string app_id = 1;
404
+ }
405
+
406
+ message AppGetTagsResponse {
407
+ map<string, string> tags = 1;
408
+ }
409
+
402
410
  message AppHeartbeatRequest {
403
411
  string app_id = 1;
404
412
  }
@@ -468,6 +476,12 @@ message AppSetObjectsRequest {
468
476
  reserved 6;
469
477
  }
470
478
 
479
+ message AppSetTagsRequest {
480
+ string app_id = 1;
481
+ map<string, string> tags = 2;
482
+ }
483
+
484
+
471
485
  message AppStopRequest {
472
486
  string app_id = 1 [ (modal.options.audit_target_attr) = true ];
473
487
  AppStopSource source = 2;
@@ -3582,12 +3596,14 @@ service ModalClient {
3582
3596
  rpc AppGetLogs(AppGetLogsRequest) returns (stream TaskLogsBatch);
3583
3597
  rpc AppGetObjects(AppGetObjectsRequest) returns (AppGetObjectsResponse);
3584
3598
  rpc AppGetOrCreate(AppGetOrCreateRequest) returns (AppGetOrCreateResponse);
3599
+ rpc AppGetTags(AppGetTagsRequest) returns (AppGetTagsResponse);
3585
3600
  rpc AppHeartbeat(AppHeartbeatRequest) returns (google.protobuf.Empty);
3586
3601
  rpc AppList(AppListRequest) returns (AppListResponse);
3587
3602
  rpc AppLookup(AppLookupRequest) returns (AppLookupResponse);
3588
3603
  rpc AppPublish(AppPublishRequest) returns (AppPublishResponse);
3589
3604
  rpc AppRollback(AppRollbackRequest) returns (google.protobuf.Empty);
3590
3605
  rpc AppSetObjects(AppSetObjectsRequest) returns (google.protobuf.Empty);
3606
+ rpc AppSetTags(AppSetTagsRequest) returns (google.protobuf.Empty);
3591
3607
  rpc AppStop(AppStopRequest) returns (google.protobuf.Empty);
3592
3608
 
3593
3609
  // Input Plane
modal_proto/api_grpc.py CHANGED
@@ -55,6 +55,10 @@ class ModalClientBase(abc.ABC):
55
55
  async def AppGetOrCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppGetOrCreateRequest, modal_proto.api_pb2.AppGetOrCreateResponse]') -> None:
56
56
  pass
57
57
 
58
+ @abc.abstractmethod
59
+ async def AppGetTags(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppGetTagsRequest, modal_proto.api_pb2.AppGetTagsResponse]') -> None:
60
+ pass
61
+
58
62
  @abc.abstractmethod
59
63
  async def AppHeartbeat(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppHeartbeatRequest, google.protobuf.empty_pb2.Empty]') -> None:
60
64
  pass
@@ -79,6 +83,10 @@ class ModalClientBase(abc.ABC):
79
83
  async def AppSetObjects(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppSetObjectsRequest, google.protobuf.empty_pb2.Empty]') -> None:
80
84
  pass
81
85
 
86
+ @abc.abstractmethod
87
+ async def AppSetTags(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppSetTagsRequest, google.protobuf.empty_pb2.Empty]') -> None:
88
+ pass
89
+
82
90
  @abc.abstractmethod
83
91
  async def AppStop(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppStopRequest, google.protobuf.empty_pb2.Empty]') -> None:
84
92
  pass
@@ -767,6 +775,12 @@ class ModalClientBase(abc.ABC):
767
775
  modal_proto.api_pb2.AppGetOrCreateRequest,
768
776
  modal_proto.api_pb2.AppGetOrCreateResponse,
769
777
  ),
778
+ '/modal.client.ModalClient/AppGetTags': grpclib.const.Handler(
779
+ self.AppGetTags,
780
+ grpclib.const.Cardinality.UNARY_UNARY,
781
+ modal_proto.api_pb2.AppGetTagsRequest,
782
+ modal_proto.api_pb2.AppGetTagsResponse,
783
+ ),
770
784
  '/modal.client.ModalClient/AppHeartbeat': grpclib.const.Handler(
771
785
  self.AppHeartbeat,
772
786
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -803,6 +817,12 @@ class ModalClientBase(abc.ABC):
803
817
  modal_proto.api_pb2.AppSetObjectsRequest,
804
818
  google.protobuf.empty_pb2.Empty,
805
819
  ),
820
+ '/modal.client.ModalClient/AppSetTags': grpclib.const.Handler(
821
+ self.AppSetTags,
822
+ grpclib.const.Cardinality.UNARY_UNARY,
823
+ modal_proto.api_pb2.AppSetTagsRequest,
824
+ google.protobuf.empty_pb2.Empty,
825
+ ),
806
826
  '/modal.client.ModalClient/AppStop': grpclib.const.Handler(
807
827
  self.AppStop,
808
828
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1811,6 +1831,12 @@ class ModalClientStub:
1811
1831
  modal_proto.api_pb2.AppGetOrCreateRequest,
1812
1832
  modal_proto.api_pb2.AppGetOrCreateResponse,
1813
1833
  )
1834
+ self.AppGetTags = grpclib.client.UnaryUnaryMethod(
1835
+ channel,
1836
+ '/modal.client.ModalClient/AppGetTags',
1837
+ modal_proto.api_pb2.AppGetTagsRequest,
1838
+ modal_proto.api_pb2.AppGetTagsResponse,
1839
+ )
1814
1840
  self.AppHeartbeat = grpclib.client.UnaryUnaryMethod(
1815
1841
  channel,
1816
1842
  '/modal.client.ModalClient/AppHeartbeat',
@@ -1847,6 +1873,12 @@ class ModalClientStub:
1847
1873
  modal_proto.api_pb2.AppSetObjectsRequest,
1848
1874
  google.protobuf.empty_pb2.Empty,
1849
1875
  )
1876
+ self.AppSetTags = grpclib.client.UnaryUnaryMethod(
1877
+ channel,
1878
+ '/modal.client.ModalClient/AppSetTags',
1879
+ modal_proto.api_pb2.AppSetTagsRequest,
1880
+ google.protobuf.empty_pb2.Empty,
1881
+ )
1850
1882
  self.AppStop = grpclib.client.UnaryUnaryMethod(
1851
1883
  channel,
1852
1884
  '/modal.client.ModalClient/AppStop',