modal 1.1.5.dev66__py3-none-any.whl → 1.3.1.dev8__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.

Files changed (143) hide show
  1. modal/__init__.py +4 -4
  2. modal/__main__.py +4 -29
  3. modal/_billing.py +84 -0
  4. modal/_clustered_functions.py +1 -3
  5. modal/_container_entrypoint.py +33 -208
  6. modal/_functions.py +171 -138
  7. modal/_grpc_client.py +191 -0
  8. modal/_ipython.py +16 -6
  9. modal/_load_context.py +106 -0
  10. modal/_object.py +72 -21
  11. modal/_output.py +12 -14
  12. modal/_partial_function.py +31 -4
  13. modal/_resolver.py +44 -57
  14. modal/_runtime/container_io_manager.py +30 -28
  15. modal/_runtime/container_io_manager.pyi +42 -44
  16. modal/_runtime/gpu_memory_snapshot.py +9 -7
  17. modal/_runtime/user_code_event_loop.py +80 -0
  18. modal/_runtime/user_code_imports.py +236 -10
  19. modal/_serialization.py +2 -1
  20. modal/_traceback.py +4 -13
  21. modal/_tunnel.py +16 -11
  22. modal/_tunnel.pyi +25 -3
  23. modal/_utils/async_utils.py +337 -10
  24. modal/_utils/auth_token_manager.py +1 -4
  25. modal/_utils/blob_utils.py +29 -22
  26. modal/_utils/function_utils.py +20 -21
  27. modal/_utils/grpc_testing.py +6 -3
  28. modal/_utils/grpc_utils.py +223 -64
  29. modal/_utils/mount_utils.py +26 -1
  30. modal/_utils/name_utils.py +2 -3
  31. modal/_utils/package_utils.py +0 -1
  32. modal/_utils/rand_pb_testing.py +8 -1
  33. modal/_utils/task_command_router_client.py +524 -0
  34. modal/_vendor/cloudpickle.py +144 -48
  35. modal/app.py +285 -105
  36. modal/app.pyi +216 -53
  37. modal/billing.py +5 -0
  38. modal/builder/2025.06.txt +6 -3
  39. modal/builder/PREVIEW.txt +2 -1
  40. modal/builder/base-images.json +4 -2
  41. modal/cli/_download.py +19 -3
  42. modal/cli/cluster.py +4 -2
  43. modal/cli/config.py +3 -1
  44. modal/cli/container.py +5 -4
  45. modal/cli/dict.py +5 -2
  46. modal/cli/entry_point.py +26 -2
  47. modal/cli/environment.py +2 -16
  48. modal/cli/launch.py +1 -76
  49. modal/cli/network_file_system.py +5 -20
  50. modal/cli/programs/run_jupyter.py +1 -1
  51. modal/cli/programs/vscode.py +1 -1
  52. modal/cli/queues.py +5 -4
  53. modal/cli/run.py +24 -204
  54. modal/cli/secret.py +1 -2
  55. modal/cli/shell.py +375 -0
  56. modal/cli/utils.py +1 -13
  57. modal/cli/volume.py +11 -17
  58. modal/client.py +16 -125
  59. modal/client.pyi +94 -144
  60. modal/cloud_bucket_mount.py +3 -1
  61. modal/cloud_bucket_mount.pyi +4 -0
  62. modal/cls.py +101 -64
  63. modal/cls.pyi +9 -8
  64. modal/config.py +21 -1
  65. modal/container_process.py +288 -12
  66. modal/container_process.pyi +99 -38
  67. modal/dict.py +72 -33
  68. modal/dict.pyi +88 -57
  69. modal/environments.py +16 -8
  70. modal/environments.pyi +6 -2
  71. modal/exception.py +154 -16
  72. modal/experimental/__init__.py +24 -53
  73. modal/experimental/flash.py +161 -74
  74. modal/experimental/flash.pyi +97 -49
  75. modal/file_io.py +50 -92
  76. modal/file_io.pyi +117 -89
  77. modal/functions.pyi +70 -87
  78. modal/image.py +82 -47
  79. modal/image.pyi +51 -30
  80. modal/io_streams.py +500 -149
  81. modal/io_streams.pyi +279 -189
  82. modal/mount.py +60 -46
  83. modal/mount.pyi +41 -17
  84. modal/network_file_system.py +19 -11
  85. modal/network_file_system.pyi +72 -39
  86. modal/object.pyi +114 -22
  87. modal/parallel_map.py +42 -44
  88. modal/parallel_map.pyi +9 -17
  89. modal/partial_function.pyi +4 -2
  90. modal/proxy.py +14 -6
  91. modal/proxy.pyi +10 -2
  92. modal/queue.py +45 -38
  93. modal/queue.pyi +88 -52
  94. modal/runner.py +96 -96
  95. modal/runner.pyi +44 -27
  96. modal/sandbox.py +225 -107
  97. modal/sandbox.pyi +226 -60
  98. modal/secret.py +58 -56
  99. modal/secret.pyi +28 -13
  100. modal/serving.py +7 -11
  101. modal/serving.pyi +7 -8
  102. modal/snapshot.py +29 -15
  103. modal/snapshot.pyi +18 -10
  104. modal/token_flow.py +1 -1
  105. modal/token_flow.pyi +4 -6
  106. modal/volume.py +102 -55
  107. modal/volume.pyi +125 -66
  108. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/METADATA +10 -9
  109. modal-1.3.1.dev8.dist-info/RECORD +189 -0
  110. modal_proto/api.proto +141 -70
  111. modal_proto/api_grpc.py +42 -26
  112. modal_proto/api_pb2.py +1123 -1103
  113. modal_proto/api_pb2.pyi +331 -83
  114. modal_proto/api_pb2_grpc.py +80 -48
  115. modal_proto/api_pb2_grpc.pyi +26 -18
  116. modal_proto/modal_api_grpc.py +175 -174
  117. modal_proto/task_command_router.proto +164 -0
  118. modal_proto/task_command_router_grpc.py +138 -0
  119. modal_proto/task_command_router_pb2.py +180 -0
  120. modal_proto/{sandbox_router_pb2.pyi → task_command_router_pb2.pyi} +148 -57
  121. modal_proto/task_command_router_pb2_grpc.py +272 -0
  122. modal_proto/task_command_router_pb2_grpc.pyi +100 -0
  123. modal_version/__init__.py +1 -1
  124. modal_version/__main__.py +1 -1
  125. modal/cli/programs/launch_instance_ssh.py +0 -94
  126. modal/cli/programs/run_marimo.py +0 -95
  127. modal-1.1.5.dev66.dist-info/RECORD +0 -191
  128. modal_proto/modal_options_grpc.py +0 -3
  129. modal_proto/options.proto +0 -19
  130. modal_proto/options_grpc.py +0 -3
  131. modal_proto/options_pb2.py +0 -35
  132. modal_proto/options_pb2.pyi +0 -20
  133. modal_proto/options_pb2_grpc.py +0 -4
  134. modal_proto/options_pb2_grpc.pyi +0 -7
  135. modal_proto/sandbox_router.proto +0 -125
  136. modal_proto/sandbox_router_grpc.py +0 -89
  137. modal_proto/sandbox_router_pb2.py +0 -128
  138. modal_proto/sandbox_router_pb2_grpc.py +0 -169
  139. modal_proto/sandbox_router_pb2_grpc.pyi +0 -63
  140. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/WHEEL +0 -0
  141. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/entry_points.txt +0 -0
  142. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/licenses/LICENSE +0 -0
  143. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/top_level.txt +0 -0
@@ -60,6 +60,11 @@ class ModalClientStub(object):
60
60
  request_serializer=modal__proto_dot_api__pb2.AppGetOrCreateRequest.SerializeToString,
61
61
  response_deserializer=modal__proto_dot_api__pb2.AppGetOrCreateResponse.FromString,
62
62
  )
63
+ self.AppGetTags = channel.unary_unary(
64
+ '/modal.client.ModalClient/AppGetTags',
65
+ request_serializer=modal__proto_dot_api__pb2.AppGetTagsRequest.SerializeToString,
66
+ response_deserializer=modal__proto_dot_api__pb2.AppGetTagsResponse.FromString,
67
+ )
63
68
  self.AppHeartbeat = channel.unary_unary(
64
69
  '/modal.client.ModalClient/AppHeartbeat',
65
70
  request_serializer=modal__proto_dot_api__pb2.AppHeartbeatRequest.SerializeToString,
@@ -90,6 +95,11 @@ class ModalClientStub(object):
90
95
  request_serializer=modal__proto_dot_api__pb2.AppSetObjectsRequest.SerializeToString,
91
96
  response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
92
97
  )
98
+ self.AppSetTags = channel.unary_unary(
99
+ '/modal.client.ModalClient/AppSetTags',
100
+ request_serializer=modal__proto_dot_api__pb2.AppSetTagsRequest.SerializeToString,
101
+ response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
102
+ )
93
103
  self.AppStop = channel.unary_unary(
94
104
  '/modal.client.ModalClient/AppStop',
95
105
  request_serializer=modal__proto_dot_api__pb2.AppStopRequest.SerializeToString,
@@ -585,11 +595,6 @@ class ModalClientStub(object):
585
595
  request_serializer=modal__proto_dot_api__pb2.SandboxCreateConnectTokenRequest.SerializeToString,
586
596
  response_deserializer=modal__proto_dot_api__pb2.SandboxCreateConnectTokenResponse.FromString,
587
597
  )
588
- self.SandboxGetCommandRouterAccess = channel.unary_unary(
589
- '/modal.client.ModalClient/SandboxGetCommandRouterAccess',
590
- request_serializer=modal__proto_dot_api__pb2.SandboxGetCommandRouterAccessRequest.SerializeToString,
591
- response_deserializer=modal__proto_dot_api__pb2.SandboxGetCommandRouterAccessResponse.FromString,
592
- )
593
598
  self.SandboxGetFromName = channel.unary_unary(
594
599
  '/modal.client.ModalClient/SandboxGetFromName',
595
600
  request_serializer=modal__proto_dot_api__pb2.SandboxGetFromNameRequest.SerializeToString,
@@ -750,10 +755,10 @@ class ModalClientStub(object):
750
755
  request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
751
756
  response_deserializer=modal__proto_dot_api__pb2.TaskCurrentInputsResponse.FromString,
752
757
  )
753
- self.TaskGetAutoscalingMetrics = channel.unary_unary(
754
- '/modal.client.ModalClient/TaskGetAutoscalingMetrics',
755
- request_serializer=modal__proto_dot_api__pb2.TaskGetAutoscalingMetricsRequest.SerializeToString,
756
- response_deserializer=modal__proto_dot_api__pb2.TaskGetAutoscalingMetricsResponse.FromString,
758
+ self.TaskGetCommandRouterAccess = channel.unary_unary(
759
+ '/modal.client.ModalClient/TaskGetCommandRouterAccess',
760
+ request_serializer=modal__proto_dot_api__pb2.TaskGetCommandRouterAccessRequest.SerializeToString,
761
+ response_deserializer=modal__proto_dot_api__pb2.TaskGetCommandRouterAccessResponse.FromString,
757
762
  )
758
763
  self.TaskList = channel.unary_unary(
759
764
  '/modal.client.ModalClient/TaskList',
@@ -940,6 +945,12 @@ class ModalClientServicer(object):
940
945
  context.set_details('Method not implemented!')
941
946
  raise NotImplementedError('Method not implemented!')
942
947
 
948
+ def AppGetTags(self, request, context):
949
+ """Missing associated documentation comment in .proto file."""
950
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
951
+ context.set_details('Method not implemented!')
952
+ raise NotImplementedError('Method not implemented!')
953
+
943
954
  def AppHeartbeat(self, request, context):
944
955
  """Missing associated documentation comment in .proto file."""
945
956
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -976,6 +987,12 @@ class ModalClientServicer(object):
976
987
  context.set_details('Method not implemented!')
977
988
  raise NotImplementedError('Method not implemented!')
978
989
 
990
+ def AppSetTags(self, request, context):
991
+ """Missing associated documentation comment in .proto file."""
992
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
993
+ context.set_details('Method not implemented!')
994
+ raise NotImplementedError('Method not implemented!')
995
+
979
996
  def AppStop(self, request, context):
980
997
  """Missing associated documentation comment in .proto file."""
981
998
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -1593,12 +1610,6 @@ class ModalClientServicer(object):
1593
1610
  context.set_details('Method not implemented!')
1594
1611
  raise NotImplementedError('Method not implemented!')
1595
1612
 
1596
- def SandboxGetCommandRouterAccess(self, request, context):
1597
- """Missing associated documentation comment in .proto file."""
1598
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1599
- context.set_details('Method not implemented!')
1600
- raise NotImplementedError('Method not implemented!')
1601
-
1602
1613
  def SandboxGetFromName(self, request, context):
1603
1614
  """Missing associated documentation comment in .proto file."""
1604
1615
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -1795,9 +1806,8 @@ class ModalClientServicer(object):
1795
1806
  context.set_details('Method not implemented!')
1796
1807
  raise NotImplementedError('Method not implemented!')
1797
1808
 
1798
- def TaskGetAutoscalingMetrics(self, request, context):
1799
- """Used for flash autoscaling
1800
- """
1809
+ def TaskGetCommandRouterAccess(self, request, context):
1810
+ """Missing associated documentation comment in .proto file."""
1801
1811
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1802
1812
  context.set_details('Method not implemented!')
1803
1813
  raise NotImplementedError('Method not implemented!')
@@ -2004,6 +2014,11 @@ def add_ModalClientServicer_to_server(servicer, server):
2004
2014
  request_deserializer=modal__proto_dot_api__pb2.AppGetOrCreateRequest.FromString,
2005
2015
  response_serializer=modal__proto_dot_api__pb2.AppGetOrCreateResponse.SerializeToString,
2006
2016
  ),
2017
+ 'AppGetTags': grpc.unary_unary_rpc_method_handler(
2018
+ servicer.AppGetTags,
2019
+ request_deserializer=modal__proto_dot_api__pb2.AppGetTagsRequest.FromString,
2020
+ response_serializer=modal__proto_dot_api__pb2.AppGetTagsResponse.SerializeToString,
2021
+ ),
2007
2022
  'AppHeartbeat': grpc.unary_unary_rpc_method_handler(
2008
2023
  servicer.AppHeartbeat,
2009
2024
  request_deserializer=modal__proto_dot_api__pb2.AppHeartbeatRequest.FromString,
@@ -2034,6 +2049,11 @@ def add_ModalClientServicer_to_server(servicer, server):
2034
2049
  request_deserializer=modal__proto_dot_api__pb2.AppSetObjectsRequest.FromString,
2035
2050
  response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
2036
2051
  ),
2052
+ 'AppSetTags': grpc.unary_unary_rpc_method_handler(
2053
+ servicer.AppSetTags,
2054
+ request_deserializer=modal__proto_dot_api__pb2.AppSetTagsRequest.FromString,
2055
+ response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
2056
+ ),
2037
2057
  'AppStop': grpc.unary_unary_rpc_method_handler(
2038
2058
  servicer.AppStop,
2039
2059
  request_deserializer=modal__proto_dot_api__pb2.AppStopRequest.FromString,
@@ -2529,11 +2549,6 @@ def add_ModalClientServicer_to_server(servicer, server):
2529
2549
  request_deserializer=modal__proto_dot_api__pb2.SandboxCreateConnectTokenRequest.FromString,
2530
2550
  response_serializer=modal__proto_dot_api__pb2.SandboxCreateConnectTokenResponse.SerializeToString,
2531
2551
  ),
2532
- 'SandboxGetCommandRouterAccess': grpc.unary_unary_rpc_method_handler(
2533
- servicer.SandboxGetCommandRouterAccess,
2534
- request_deserializer=modal__proto_dot_api__pb2.SandboxGetCommandRouterAccessRequest.FromString,
2535
- response_serializer=modal__proto_dot_api__pb2.SandboxGetCommandRouterAccessResponse.SerializeToString,
2536
- ),
2537
2552
  'SandboxGetFromName': grpc.unary_unary_rpc_method_handler(
2538
2553
  servicer.SandboxGetFromName,
2539
2554
  request_deserializer=modal__proto_dot_api__pb2.SandboxGetFromNameRequest.FromString,
@@ -2694,10 +2709,10 @@ def add_ModalClientServicer_to_server(servicer, server):
2694
2709
  request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
2695
2710
  response_serializer=modal__proto_dot_api__pb2.TaskCurrentInputsResponse.SerializeToString,
2696
2711
  ),
2697
- 'TaskGetAutoscalingMetrics': grpc.unary_unary_rpc_method_handler(
2698
- servicer.TaskGetAutoscalingMetrics,
2699
- request_deserializer=modal__proto_dot_api__pb2.TaskGetAutoscalingMetricsRequest.FromString,
2700
- response_serializer=modal__proto_dot_api__pb2.TaskGetAutoscalingMetricsResponse.SerializeToString,
2712
+ 'TaskGetCommandRouterAccess': grpc.unary_unary_rpc_method_handler(
2713
+ servicer.TaskGetCommandRouterAccess,
2714
+ request_deserializer=modal__proto_dot_api__pb2.TaskGetCommandRouterAccessRequest.FromString,
2715
+ response_serializer=modal__proto_dot_api__pb2.TaskGetCommandRouterAccessResponse.SerializeToString,
2701
2716
  ),
2702
2717
  'TaskList': grpc.unary_unary_rpc_method_handler(
2703
2718
  servicer.TaskList,
@@ -2987,6 +3002,23 @@ class ModalClient(object):
2987
3002
  options, channel_credentials,
2988
3003
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
2989
3004
 
3005
+ @staticmethod
3006
+ def AppGetTags(request,
3007
+ target,
3008
+ options=(),
3009
+ channel_credentials=None,
3010
+ call_credentials=None,
3011
+ insecure=False,
3012
+ compression=None,
3013
+ wait_for_ready=None,
3014
+ timeout=None,
3015
+ metadata=None):
3016
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/AppGetTags',
3017
+ modal__proto_dot_api__pb2.AppGetTagsRequest.SerializeToString,
3018
+ modal__proto_dot_api__pb2.AppGetTagsResponse.FromString,
3019
+ options, channel_credentials,
3020
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3021
+
2990
3022
  @staticmethod
2991
3023
  def AppHeartbeat(request,
2992
3024
  target,
@@ -3089,6 +3121,23 @@ class ModalClient(object):
3089
3121
  options, channel_credentials,
3090
3122
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3091
3123
 
3124
+ @staticmethod
3125
+ def AppSetTags(request,
3126
+ target,
3127
+ options=(),
3128
+ channel_credentials=None,
3129
+ call_credentials=None,
3130
+ insecure=False,
3131
+ compression=None,
3132
+ wait_for_ready=None,
3133
+ timeout=None,
3134
+ metadata=None):
3135
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/AppSetTags',
3136
+ modal__proto_dot_api__pb2.AppSetTagsRequest.SerializeToString,
3137
+ google_dot_protobuf_dot_empty__pb2.Empty.FromString,
3138
+ options, channel_credentials,
3139
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3140
+
3092
3141
  @staticmethod
3093
3142
  def AppStop(request,
3094
3143
  target,
@@ -4772,23 +4821,6 @@ class ModalClient(object):
4772
4821
  options, channel_credentials,
4773
4822
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
4774
4823
 
4775
- @staticmethod
4776
- def SandboxGetCommandRouterAccess(request,
4777
- target,
4778
- options=(),
4779
- channel_credentials=None,
4780
- call_credentials=None,
4781
- insecure=False,
4782
- compression=None,
4783
- wait_for_ready=None,
4784
- timeout=None,
4785
- metadata=None):
4786
- return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/SandboxGetCommandRouterAccess',
4787
- modal__proto_dot_api__pb2.SandboxGetCommandRouterAccessRequest.SerializeToString,
4788
- modal__proto_dot_api__pb2.SandboxGetCommandRouterAccessResponse.FromString,
4789
- options, channel_credentials,
4790
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
4791
-
4792
4824
  @staticmethod
4793
4825
  def SandboxGetFromName(request,
4794
4826
  target,
@@ -5334,7 +5366,7 @@ class ModalClient(object):
5334
5366
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
5335
5367
 
5336
5368
  @staticmethod
5337
- def TaskGetAutoscalingMetrics(request,
5369
+ def TaskGetCommandRouterAccess(request,
5338
5370
  target,
5339
5371
  options=(),
5340
5372
  channel_credentials=None,
@@ -5344,9 +5376,9 @@ class ModalClient(object):
5344
5376
  wait_for_ready=None,
5345
5377
  timeout=None,
5346
5378
  metadata=None):
5347
- return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/TaskGetAutoscalingMetrics',
5348
- modal__proto_dot_api__pb2.TaskGetAutoscalingMetricsRequest.SerializeToString,
5349
- modal__proto_dot_api__pb2.TaskGetAutoscalingMetricsResponse.FromString,
5379
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/TaskGetCommandRouterAccess',
5380
+ modal__proto_dot_api__pb2.TaskGetCommandRouterAccessRequest.SerializeToString,
5381
+ modal__proto_dot_api__pb2.TaskGetCommandRouterAccessResponse.FromString,
5350
5382
  options, channel_credentials,
5351
5383
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
5352
5384
 
@@ -47,6 +47,10 @@ class ModalClientStub:
47
47
  modal_proto.api_pb2.AppGetOrCreateRequest,
48
48
  modal_proto.api_pb2.AppGetOrCreateResponse,
49
49
  ]
50
+ AppGetTags: grpc.UnaryUnaryMultiCallable[
51
+ modal_proto.api_pb2.AppGetTagsRequest,
52
+ modal_proto.api_pb2.AppGetTagsResponse,
53
+ ]
50
54
  AppHeartbeat: grpc.UnaryUnaryMultiCallable[
51
55
  modal_proto.api_pb2.AppHeartbeatRequest,
52
56
  google.protobuf.empty_pb2.Empty,
@@ -71,6 +75,10 @@ class ModalClientStub:
71
75
  modal_proto.api_pb2.AppSetObjectsRequest,
72
76
  google.protobuf.empty_pb2.Empty,
73
77
  ]
78
+ AppSetTags: grpc.UnaryUnaryMultiCallable[
79
+ modal_proto.api_pb2.AppSetTagsRequest,
80
+ google.protobuf.empty_pb2.Empty,
81
+ ]
74
82
  AppStop: grpc.UnaryUnaryMultiCallable[
75
83
  modal_proto.api_pb2.AppStopRequest,
76
84
  google.protobuf.empty_pb2.Empty,
@@ -490,10 +498,6 @@ class ModalClientStub:
490
498
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
491
499
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
492
500
  ]
493
- SandboxGetCommandRouterAccess: grpc.UnaryUnaryMultiCallable[
494
- modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
495
- modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
496
- ]
497
501
  SandboxGetFromName: grpc.UnaryUnaryMultiCallable[
498
502
  modal_proto.api_pb2.SandboxGetFromNameRequest,
499
503
  modal_proto.api_pb2.SandboxGetFromNameResponse,
@@ -626,11 +630,10 @@ class ModalClientStub:
626
630
  google.protobuf.empty_pb2.Empty,
627
631
  modal_proto.api_pb2.TaskCurrentInputsResponse,
628
632
  ]
629
- TaskGetAutoscalingMetrics: grpc.UnaryUnaryMultiCallable[
630
- modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
631
- modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
633
+ TaskGetCommandRouterAccess: grpc.UnaryUnaryMultiCallable[
634
+ modal_proto.api_pb2.TaskGetCommandRouterAccessRequest,
635
+ modal_proto.api_pb2.TaskGetCommandRouterAccessResponse,
632
636
  ]
633
- """Used for flash autoscaling"""
634
637
  TaskList: grpc.UnaryUnaryMultiCallable[
635
638
  modal_proto.api_pb2.TaskListRequest,
636
639
  modal_proto.api_pb2.TaskListResponse,
@@ -793,6 +796,12 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
793
796
  context: grpc.ServicerContext,
794
797
  ) -> modal_proto.api_pb2.AppGetOrCreateResponse: ...
795
798
  @abc.abstractmethod
799
+ def AppGetTags(
800
+ self,
801
+ request: modal_proto.api_pb2.AppGetTagsRequest,
802
+ context: grpc.ServicerContext,
803
+ ) -> modal_proto.api_pb2.AppGetTagsResponse: ...
804
+ @abc.abstractmethod
796
805
  def AppHeartbeat(
797
806
  self,
798
807
  request: modal_proto.api_pb2.AppHeartbeatRequest,
@@ -829,6 +838,12 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
829
838
  context: grpc.ServicerContext,
830
839
  ) -> google.protobuf.empty_pb2.Empty: ...
831
840
  @abc.abstractmethod
841
+ def AppSetTags(
842
+ self,
843
+ request: modal_proto.api_pb2.AppSetTagsRequest,
844
+ context: grpc.ServicerContext,
845
+ ) -> google.protobuf.empty_pb2.Empty: ...
846
+ @abc.abstractmethod
832
847
  def AppStop(
833
848
  self,
834
849
  request: modal_proto.api_pb2.AppStopRequest,
@@ -1446,12 +1461,6 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
1446
1461
  context: grpc.ServicerContext,
1447
1462
  ) -> modal_proto.api_pb2.SandboxCreateConnectTokenResponse: ...
1448
1463
  @abc.abstractmethod
1449
- def SandboxGetCommandRouterAccess(
1450
- self,
1451
- request: modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
1452
- context: grpc.ServicerContext,
1453
- ) -> modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse: ...
1454
- @abc.abstractmethod
1455
1464
  def SandboxGetFromName(
1456
1465
  self,
1457
1466
  request: modal_proto.api_pb2.SandboxGetFromNameRequest,
@@ -1648,12 +1657,11 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
1648
1657
  context: grpc.ServicerContext,
1649
1658
  ) -> modal_proto.api_pb2.TaskCurrentInputsResponse: ...
1650
1659
  @abc.abstractmethod
1651
- def TaskGetAutoscalingMetrics(
1660
+ def TaskGetCommandRouterAccess(
1652
1661
  self,
1653
- request: modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
1662
+ request: modal_proto.api_pb2.TaskGetCommandRouterAccessRequest,
1654
1663
  context: grpc.ServicerContext,
1655
- ) -> modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse:
1656
- """Used for flash autoscaling"""
1664
+ ) -> modal_proto.api_pb2.TaskGetCommandRouterAccessResponse: ...
1657
1665
  @abc.abstractmethod
1658
1666
  def TaskList(
1659
1667
  self,