modAL 1.3.3__tar.gz → 1.3.3.dev0__tar.gz

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.
Files changed (209) hide show
  1. {modal-1.3.3 → modal-1.3.3.dev0}/PKG-INFO +1 -1
  2. {modal-1.3.3 → modal-1.3.3.dev0}/modal/__init__.py +2 -2
  3. modal-1.3.3.dev0/modal/__main__.py +53 -0
  4. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_billing.py +2 -8
  5. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_functions.py +8 -5
  6. modal-1.3.3/modal/_output/rich.py → modal-1.3.3.dev0/modal/_output.py +266 -326
  7. modal-1.3.3.dev0/modal/_pty.py +57 -0
  8. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_resolver.py +62 -1
  9. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/asgi.py +2 -2
  10. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_server.py +0 -3
  11. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/browser_utils.py +7 -8
  12. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/function_utils.py +87 -0
  13. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/shell_utils.py +2 -48
  14. modal-1.3.3.dev0/modal/_utils/time_utils.py +43 -0
  15. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_watcher.py +3 -2
  16. {modal-1.3.3 → modal-1.3.3.dev0}/modal/app.pyi +3 -3
  17. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/_traceback.py +36 -3
  18. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/app.py +4 -1
  19. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/cluster.py +5 -4
  20. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/config.py +3 -2
  21. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/container.py +2 -8
  22. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/dashboard.py +4 -1
  23. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/dict.py +3 -2
  24. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/entry_point.py +10 -15
  25. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/import_refs.py +10 -15
  26. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/launch.py +15 -12
  27. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/network_file_system.py +29 -21
  28. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/profile.py +6 -6
  29. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/queues.py +5 -4
  30. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/run.py +45 -46
  31. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/secret.py +6 -7
  32. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/token.py +12 -11
  33. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/utils.py +9 -28
  34. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/volume.py +24 -19
  35. {modal-1.3.3 → modal-1.3.3.dev0}/modal/client.pyi +10 -2
  36. {modal-1.3.3 → modal-1.3.3.dev0}/modal/container_process.py +8 -6
  37. {modal-1.3.3 → modal-1.3.3.dev0}/modal/dict.py +0 -42
  38. {modal-1.3.3 → modal-1.3.3.dev0}/modal/dict.pyi +0 -52
  39. {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/flash.py +1 -10
  40. {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/flash.pyi +0 -3
  41. {modal-1.3.3 → modal-1.3.3.dev0}/modal/image.py +8 -6
  42. {modal-1.3.3 → modal-1.3.3.dev0}/modal/image.pyi +1 -1
  43. {modal-1.3.3 → modal-1.3.3.dev0}/modal/mount.py +1 -4
  44. {modal-1.3.3 → modal-1.3.3.dev0}/modal/object.pyi +13 -57
  45. modal-1.3.3.dev0/modal/output.py +64 -0
  46. {modal-1.3.3 → modal-1.3.3.dev0}/modal/partial_function.pyi +1 -2
  47. {modal-1.3.3 → modal-1.3.3.dev0}/modal/queue.py +0 -42
  48. {modal-1.3.3 → modal-1.3.3.dev0}/modal/queue.pyi +0 -52
  49. {modal-1.3.3 → modal-1.3.3.dev0}/modal/retries.py +3 -0
  50. {modal-1.3.3 → modal-1.3.3.dev0}/modal/runner.py +56 -49
  51. {modal-1.3.3 → modal-1.3.3.dev0}/modal/sandbox.py +1 -1
  52. {modal-1.3.3 → modal-1.3.3.dev0}/modal/serving.py +13 -10
  53. {modal-1.3.3 → modal-1.3.3.dev0}/modal/token_flow.py +19 -18
  54. {modal-1.3.3 → modal-1.3.3.dev0}/modal/volume.py +1 -27
  55. {modal-1.3.3 → modal-1.3.3.dev0}/modal/volume.pyi +0 -4
  56. {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/PKG-INFO +1 -1
  57. {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/SOURCES.txt +2 -6
  58. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api.proto +0 -20
  59. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_grpc.py +0 -32
  60. modal-1.3.3.dev0/modal_proto/api_pb2.py +1139 -0
  61. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_pb2.pyi +0 -66
  62. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_pb2_grpc.py +0 -66
  63. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_pb2_grpc.pyi +0 -20
  64. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/modal_api_grpc.py +0 -2
  65. modal-1.3.3.dev0/modal_proto/task_command_router_pb2.py +60 -0
  66. {modal-1.3.3 → modal-1.3.3.dev0}/modal_version/__init__.py +1 -1
  67. modal-1.3.3/modal/__main__.py +0 -49
  68. modal-1.3.3/modal/_output/__init__.py +0 -1
  69. modal-1.3.3/modal/_output/manager.py +0 -542
  70. modal-1.3.3/modal/_output/pty.py +0 -200
  71. modal-1.3.3/modal/_output/status.py +0 -101
  72. modal-1.3.3/modal/_utils/time_utils.py +0 -204
  73. modal-1.3.3/modal/cli/billing.py +0 -153
  74. modal-1.3.3/modal/output.py +0 -47
  75. modal-1.3.3/modal_proto/api_pb2.py +0 -5290
  76. modal-1.3.3/modal_proto/task_command_router_pb2.py +0 -180
  77. {modal-1.3.3 → modal-1.3.3.dev0}/LICENSE +0 -0
  78. {modal-1.3.3 → modal-1.3.3.dev0}/README.md +0 -0
  79. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_clustered_functions.py +0 -0
  80. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_clustered_functions.pyi +0 -0
  81. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_container_entrypoint.py +0 -0
  82. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_grpc_client.py +0 -0
  83. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_ipython.py +0 -0
  84. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_load_context.py +0 -0
  85. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_location.py +0 -0
  86. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_object.py +0 -0
  87. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_partial_function.py +0 -0
  88. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_resources.py +0 -0
  89. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/__init__.py +0 -0
  90. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/container_io_manager.py +0 -0
  91. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/container_io_manager.pyi +0 -0
  92. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/execution_context.py +0 -0
  93. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/execution_context.pyi +0 -0
  94. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  95. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/telemetry.py +0 -0
  96. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/user_code_event_loop.py +0 -0
  97. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/user_code_imports.py +0 -0
  98. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_serialization.py +0 -0
  99. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_traceback.py +0 -0
  100. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_tunnel.py +0 -0
  101. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_tunnel.pyi +0 -0
  102. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_type_manager.py +0 -0
  103. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/__init__.py +0 -0
  104. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/app_utils.py +0 -0
  105. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/async_utils.py +0 -0
  106. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/auth_token_manager.py +0 -0
  107. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/blob_utils.py +0 -0
  108. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/bytes_io_segment_payload.py +0 -0
  109. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/deprecation.py +0 -0
  110. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/docker_utils.py +0 -0
  111. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/git_utils.py +0 -0
  112. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/grpc_testing.py +0 -0
  113. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/grpc_utils.py +0 -0
  114. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/hash_utils.py +0 -0
  115. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/http_utils.py +0 -0
  116. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/jwt_utils.py +0 -0
  117. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/logger.py +0 -0
  118. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/mount_utils.py +0 -0
  119. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/name_utils.py +0 -0
  120. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/package_utils.py +0 -0
  121. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/pattern_utils.py +0 -0
  122. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/rand_pb_testing.py +0 -0
  123. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/task_command_router_client.py +0 -0
  124. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/__init__.py +0 -0
  125. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  126. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/cloudpickle.py +0 -0
  127. {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/tblib.py +0 -0
  128. {modal-1.3.3 → modal-1.3.3.dev0}/modal/app.py +0 -0
  129. {modal-1.3.3 → modal-1.3.3.dev0}/modal/billing.py +0 -0
  130. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2023.12.312.txt +0 -0
  131. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2023.12.txt +0 -0
  132. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2024.04.txt +0 -0
  133. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2024.10.txt +0 -0
  134. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2025.06.txt +0 -0
  135. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/PREVIEW.txt +0 -0
  136. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/README.md +0 -0
  137. {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/base-images.json +0 -0
  138. {modal-1.3.3 → modal-1.3.3.dev0}/modal/call_graph.py +0 -0
  139. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/__init__.py +0 -0
  140. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/_download.py +0 -0
  141. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/environment.py +0 -0
  142. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/programs/__init__.py +0 -0
  143. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/programs/run_jupyter.py +0 -0
  144. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/programs/vscode.py +0 -0
  145. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/shell.py +0 -0
  146. {modal-1.3.3 → modal-1.3.3.dev0}/modal/client.py +0 -0
  147. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cloud_bucket_mount.py +0 -0
  148. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cloud_bucket_mount.pyi +0 -0
  149. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cls.py +0 -0
  150. {modal-1.3.3 → modal-1.3.3.dev0}/modal/cls.pyi +0 -0
  151. {modal-1.3.3 → modal-1.3.3.dev0}/modal/config.py +0 -0
  152. {modal-1.3.3 → modal-1.3.3.dev0}/modal/container_process.pyi +0 -0
  153. {modal-1.3.3 → modal-1.3.3.dev0}/modal/environments.py +0 -0
  154. {modal-1.3.3 → modal-1.3.3.dev0}/modal/environments.pyi +0 -0
  155. {modal-1.3.3 → modal-1.3.3.dev0}/modal/exception.py +0 -0
  156. {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/__init__.py +0 -0
  157. {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/ipython.py +0 -0
  158. {modal-1.3.3 → modal-1.3.3.dev0}/modal/file_io.py +0 -0
  159. {modal-1.3.3 → modal-1.3.3.dev0}/modal/file_io.pyi +0 -0
  160. {modal-1.3.3 → modal-1.3.3.dev0}/modal/file_pattern_matcher.py +0 -0
  161. {modal-1.3.3 → modal-1.3.3.dev0}/modal/functions.py +0 -0
  162. {modal-1.3.3 → modal-1.3.3.dev0}/modal/functions.pyi +0 -0
  163. {modal-1.3.3 → modal-1.3.3.dev0}/modal/gpu.py +0 -0
  164. {modal-1.3.3 → modal-1.3.3.dev0}/modal/io_streams.py +0 -0
  165. {modal-1.3.3 → modal-1.3.3.dev0}/modal/io_streams.pyi +0 -0
  166. {modal-1.3.3 → modal-1.3.3.dev0}/modal/mount.pyi +0 -0
  167. {modal-1.3.3 → modal-1.3.3.dev0}/modal/network_file_system.py +0 -0
  168. {modal-1.3.3 → modal-1.3.3.dev0}/modal/network_file_system.pyi +0 -0
  169. {modal-1.3.3 → modal-1.3.3.dev0}/modal/object.py +0 -0
  170. {modal-1.3.3 → modal-1.3.3.dev0}/modal/parallel_map.py +0 -0
  171. {modal-1.3.3 → modal-1.3.3.dev0}/modal/parallel_map.pyi +0 -0
  172. {modal-1.3.3 → modal-1.3.3.dev0}/modal/partial_function.py +0 -0
  173. {modal-1.3.3 → modal-1.3.3.dev0}/modal/proxy.py +0 -0
  174. {modal-1.3.3 → modal-1.3.3.dev0}/modal/proxy.pyi +0 -0
  175. {modal-1.3.3 → modal-1.3.3.dev0}/modal/py.typed +0 -0
  176. {modal-1.3.3 → modal-1.3.3.dev0}/modal/runner.pyi +0 -0
  177. {modal-1.3.3 → modal-1.3.3.dev0}/modal/running_app.py +0 -0
  178. {modal-1.3.3 → modal-1.3.3.dev0}/modal/sandbox.pyi +0 -0
  179. {modal-1.3.3 → modal-1.3.3.dev0}/modal/schedule.py +0 -0
  180. {modal-1.3.3 → modal-1.3.3.dev0}/modal/scheduler_placement.py +0 -0
  181. {modal-1.3.3 → modal-1.3.3.dev0}/modal/secret.py +0 -0
  182. {modal-1.3.3 → modal-1.3.3.dev0}/modal/secret.pyi +0 -0
  183. {modal-1.3.3 → modal-1.3.3.dev0}/modal/server.py +0 -0
  184. {modal-1.3.3 → modal-1.3.3.dev0}/modal/server.pyi +0 -0
  185. {modal-1.3.3 → modal-1.3.3.dev0}/modal/serving.pyi +0 -0
  186. {modal-1.3.3 → modal-1.3.3.dev0}/modal/snapshot.py +0 -0
  187. {modal-1.3.3 → modal-1.3.3.dev0}/modal/snapshot.pyi +0 -0
  188. {modal-1.3.3 → modal-1.3.3.dev0}/modal/stream_type.py +0 -0
  189. {modal-1.3.3 → modal-1.3.3.dev0}/modal/token_flow.pyi +0 -0
  190. {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/dependency_links.txt +0 -0
  191. {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/entry_points.txt +0 -0
  192. {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/requires.txt +0 -0
  193. {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/top_level.txt +0 -0
  194. {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/__init__.py +0 -0
  195. {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/gen_cli_docs.py +0 -0
  196. {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/gen_reference_docs.py +0 -0
  197. {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/mdmd/__init__.py +0 -0
  198. {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/mdmd/mdmd.py +0 -0
  199. {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/mdmd/signatures.py +0 -0
  200. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/__init__.py +0 -0
  201. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/py.typed +0 -0
  202. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router.proto +0 -0
  203. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_grpc.py +0 -0
  204. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_pb2.pyi +0 -0
  205. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  206. {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  207. {modal-1.3.3 → modal-1.3.3.dev0}/modal_version/__main__.py +0 -0
  208. {modal-1.3.3 → modal-1.3.3.dev0}/pyproject.toml +0 -0
  209. {modal-1.3.3 → modal-1.3.3.dev0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.3.3
3
+ Version: 1.3.3.dev0
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -9,7 +9,6 @@ if sys.version_info[:2] >= (3, 15):
9
9
  from modal_version import __version__
10
10
 
11
11
  try:
12
- from . import billing
13
12
  from ._runtime.execution_context import current_function_call_id, current_input_id, interact, is_local
14
13
  from ._tunnel import Tunnel, forward
15
14
  from .app import App
@@ -42,6 +41,7 @@ try:
42
41
  from .schedule import Cron, Period
43
42
  from .scheduler_placement import SchedulerPlacement
44
43
  from .secret import Secret
44
+ from .server import Server
45
45
  from .snapshot import SandboxSnapshot
46
46
  from .volume import Volume
47
47
  except Exception:
@@ -76,11 +76,11 @@ __all__ = [
76
76
  "SandboxSnapshot",
77
77
  "SchedulerPlacement",
78
78
  "Secret",
79
+ "Server",
79
80
  "Tunnel",
80
81
  "Volume",
81
82
  "asgi_app",
82
83
  "batched",
83
- "billing",
84
84
  "concurrent",
85
85
  "current_function_call_id",
86
86
  "current_input_id",
@@ -0,0 +1,53 @@
1
+ # Copyright Modal Labs 2022
2
+ import sys
3
+
4
+ from ._output import make_console
5
+ from ._traceback import reduce_traceback_to_user_code
6
+ from .cli._traceback import highlight_modal_warnings, setup_rich_traceback
7
+ from .cli.entry_point import entrypoint_cli
8
+ from .cli.import_refs import _CliUserExecutionError
9
+ from .config import config
10
+
11
+
12
+ def main():
13
+ # Setup rich tracebacks, but only on user's end, when using the Modal CLI.
14
+ setup_rich_traceback()
15
+ highlight_modal_warnings()
16
+
17
+ try:
18
+ entrypoint_cli()
19
+
20
+ except _CliUserExecutionError as exc:
21
+ if config.get("traceback"):
22
+ raise
23
+
24
+ assert exc.__cause__ # We should always raise this class from another error
25
+ tb = reduce_traceback_to_user_code(exc.__cause__.__traceback__, exc.user_source)
26
+ sys.excepthook(type(exc.__cause__), exc.__cause__, tb)
27
+ sys.exit(1)
28
+
29
+ except Exception as exc:
30
+ if (
31
+ # User has asked to alway see full tracebacks
32
+ config.get("traceback")
33
+ # The exception message is empty, so we need to provide _some_ actionable information
34
+ or not str(exc)
35
+ ):
36
+ raise
37
+
38
+ from rich.markup import escape
39
+ from rich.panel import Panel
40
+
41
+ title = "Error"
42
+ content = str(exc)
43
+ if notes := getattr(exc, "__notes__", []):
44
+ content = f"{content}\n\nNote: {' '.join(notes)}"
45
+
46
+ console = make_console(stderr=True)
47
+ panel = Panel(escape(content), title=title, title_align="left", border_style="red")
48
+ console.print(panel, highlight=False)
49
+ sys.exit(1)
50
+
51
+
52
+ if __name__ == "__main__":
53
+ main()
@@ -40,14 +40,8 @@ async def _workspace_billing_report(
40
40
  partial `end` intervals will be excluded.
41
41
 
42
42
  Additional user-provided metadata can be included in the report if the objects have tags
43
- and `tag_names` (i.e., keys) are specified in the request. Alternatively, pass `tag_names=["*"]`
44
- to include all tags in the report. Note that tags will be attributed to the entire interval even
45
- if they were added or removed at some point within it. If the tag name was not in use during an
46
- interval, it will be absent from the tags dictionary in that output row.
47
-
48
- In most cases, billing data will be available in the database that this API queries within
49
- minutes, although there may be collection delays. If completeness is important for your use
50
- case, we recommend leaving a buffer after the end of the query interval.
43
+ and `tag_names` (i.e., keys) are specified in the request. Note that tags will be attributed
44
+ to the entire interval even if they were added or removed at some point within it.
51
45
 
52
46
  """
53
47
  if client is None:
@@ -21,8 +21,7 @@ from modal_proto.modal_api_grpc import ModalClientModal
21
21
 
22
22
  from ._load_context import LoadContext
23
23
  from ._object import _Object, live_method, live_method_gen
24
- from ._output.pty import get_pty_info
25
- from ._output.status import FunctionCreationStatus
24
+ from ._pty import get_pty_info
26
25
  from ._resolver import Resolver
27
26
  from ._resources import convert_fn_config_to_resources_config
28
27
  from ._runtime.execution_context import current_input_id, is_local
@@ -48,6 +47,7 @@ from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
48
47
  from ._utils.function_utils import (
49
48
  ATTEMPT_TIMEOUT_GRACE_PERIOD,
50
49
  OUTPUTS_TIMEOUT,
50
+ FunctionCreationStatus,
51
51
  FunctionInfo,
52
52
  _create_input,
53
53
  _process_result,
@@ -71,7 +71,7 @@ from .gpu import GPU_T, parse_gpu_config
71
71
  from .image import _Image
72
72
  from .mount import _get_client_mount, _Mount
73
73
  from .network_file_system import _NetworkFileSystem, network_file_system_mount_protos
74
- from .output import OutputManager
74
+ from .output import _get_output_manager
75
75
  from .parallel_map import (
76
76
  _experimental_spawn_map_async,
77
77
  _experimental_spawn_map_sync,
@@ -922,7 +922,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
922
922
  async def _load(
923
923
  self: _Function, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
924
924
  ):
925
- with FunctionCreationStatus(tag) as function_creation_status:
925
+ with FunctionCreationStatus(resolver, tag) as function_creation_status:
926
926
  timeout_secs = timeout
927
927
 
928
928
  if app and app.is_interactive and not is_builder_function:
@@ -1639,7 +1639,10 @@ Use the `Function.get_web_url()` method instead.
1639
1639
  raise InvalidError("A generator function cannot be called with `.map(...)`.")
1640
1640
 
1641
1641
  assert self._function_name
1642
- count_update_callback = OutputManager.get().function_progress_callback(self._function_name, total=None)
1642
+ if output_mgr := _get_output_manager():
1643
+ count_update_callback = output_mgr.function_progress_callback(self._function_name, total=None)
1644
+ else:
1645
+ count_update_callback = None
1643
1646
 
1644
1647
  if self._input_plane_url:
1645
1648
  async with aclosing(