modal 1.5.4.dev4__tar.gz → 1.5.4.dev6__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 (236) hide show
  1. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/PKG-INFO +1 -1
  2. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/client.pyi +2 -2
  3. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/functions.pyi +6 -6
  4. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/sandbox.py +17 -19
  5. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/sandbox.pyi +9 -12
  6. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/api_grpc.py +16 -0
  8. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/api_pb2.py +746 -746
  9. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/api_pb2.pyi +16 -8
  10. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/api_pb2_grpc.py +33 -0
  11. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/api_pb2_grpc.pyi +10 -0
  12. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/modal_api_grpc.py +1 -0
  13. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_version/__init__.py +1 -1
  14. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/LICENSE +0 -0
  15. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/README.md +0 -0
  16. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/__init__.py +0 -0
  17. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/__main__.py +0 -0
  18. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_billing.py +0 -0
  19. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_clustered_functions.py +0 -0
  20. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_clustered_functions.pyi +0 -0
  21. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_container_entrypoint.py +0 -0
  22. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_environments.py +0 -0
  23. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_function_variants.py +0 -0
  24. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_functions.py +0 -0
  25. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_grpc_client.py +0 -0
  26. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_image.py +0 -0
  27. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_ipython.py +0 -0
  28. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_load_context.py +0 -0
  29. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_location.py +0 -0
  30. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_logs.py +0 -0
  31. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_logs_manager.py +0 -0
  32. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_logs_manager.pyi +0 -0
  33. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_object.py +0 -0
  34. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_output/__init__.py +0 -0
  35. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_output/manager.py +0 -0
  36. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_output/pty.py +0 -0
  37. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_output/rich.py +0 -0
  38. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_output/status.py +0 -0
  39. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_partial_function.py +0 -0
  40. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_resolver.py +0 -0
  41. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_resources.py +0 -0
  42. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/__init__.py +0 -0
  43. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/asgi.py +0 -0
  44. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/container_io_manager.py +0 -0
  45. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/container_io_manager.pyi +0 -0
  46. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/execution_context.py +0 -0
  47. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/execution_context.pyi +0 -0
  48. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  49. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/task_lifecycle_manager.py +0 -0
  50. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  51. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/telemetry.py +0 -0
  52. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/user_code_event_loop.py +0 -0
  53. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_runtime/user_code_imports.py +0 -0
  54. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_serialization.py +0 -0
  55. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_server.py +0 -0
  56. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_supports_logs.py +0 -0
  57. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_traceback.py +0 -0
  58. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_tunnel.py +0 -0
  59. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_tunnel.pyi +0 -0
  60. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_type_manager.py +0 -0
  61. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/__init__.py +0 -0
  62. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/app_utils.py +0 -0
  63. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/async_utils.py +0 -0
  64. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/auth_token_manager.py +0 -0
  65. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/blob_utils.py +0 -0
  66. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/browser_utils.py +0 -0
  67. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/bytes_io_segment_payload.py +0 -0
  68. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/curl_utils.py +0 -0
  69. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/deprecation.py +0 -0
  70. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/display_utils.py +0 -0
  71. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/docker_utils.py +0 -0
  72. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/function_utils.py +0 -0
  73. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/git_utils.py +0 -0
  74. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/grpc_testing.py +0 -0
  75. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/grpc_utils.py +0 -0
  76. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/hash_utils.py +0 -0
  77. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/http_utils.py +0 -0
  78. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/jwt_utils.py +0 -0
  79. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/logger.py +0 -0
  80. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/mount_utils.py +0 -0
  81. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/name_utils.py +0 -0
  82. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/package_utils.py +0 -0
  83. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/pattern_utils.py +0 -0
  84. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/proxy_support.py +0 -0
  85. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/rand_pb_testing.py +0 -0
  86. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/sandbox_fs_utils.py +0 -0
  87. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/shell_utils.py +0 -0
  88. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/task_command_router_client.py +0 -0
  89. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_utils/time_utils.py +0 -0
  90. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_vendor/__init__.py +0 -0
  91. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  92. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_vendor/cloudpickle.py +0 -0
  93. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_vendor/tblib.py +0 -0
  94. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_vendor/version.py +0 -0
  95. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_watcher.py +0 -0
  96. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/_workspace.py +0 -0
  97. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/app.py +0 -0
  98. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/app.pyi +0 -0
  99. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/billing.py +0 -0
  100. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/billing.pyi +0 -0
  101. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/2023.12.312.txt +0 -0
  102. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/2023.12.txt +0 -0
  103. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/2024.04.txt +0 -0
  104. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/2024.10.txt +0 -0
  105. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/2025.06.txt +0 -0
  106. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/PREVIEW.txt +0 -0
  107. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/README.md +0 -0
  108. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/builder/base-images.json +0 -0
  109. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/call_graph.py +0 -0
  110. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/__init__.py +0 -0
  111. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/_download.py +0 -0
  112. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/_help.py +0 -0
  113. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/_traceback.py +0 -0
  114. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/app.py +0 -0
  115. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/billing.py +0 -0
  116. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/bootstrap.py +0 -0
  117. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/changelog.py +0 -0
  118. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/cluster.py +0 -0
  119. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/config.py +0 -0
  120. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/container.py +0 -0
  121. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/curl.py +0 -0
  122. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/dashboard.py +0 -0
  123. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/dict.py +0 -0
  124. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/endpoint.py +0 -0
  125. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/entry_point.py +0 -0
  126. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/environment.py +0 -0
  127. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/image.py +0 -0
  128. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/import_refs.py +0 -0
  129. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/launch.py +0 -0
  130. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/logo.py +0 -0
  131. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/network_file_system.py +0 -0
  132. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/profile.py +0 -0
  133. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/programs/__init__.py +0 -0
  134. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/programs/run_jupyter.py +0 -0
  135. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/programs/vscode.py +0 -0
  136. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/queues.py +0 -0
  137. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/run.py +0 -0
  138. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/secret.py +0 -0
  139. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/selector.py +0 -0
  140. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/shell.py +0 -0
  141. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/skills.py +0 -0
  142. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/token.py +0 -0
  143. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/utils.py +0 -0
  144. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/volume.py +0 -0
  145. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cli/workspace.py +0 -0
  146. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/client.py +0 -0
  147. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cloud_bucket_mount.py +0 -0
  148. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cloud_bucket_mount.pyi +0 -0
  149. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cls.py +0 -0
  150. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/cls.pyi +0 -0
  151. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/config.py +0 -0
  152. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/container_process.py +0 -0
  153. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/container_process.pyi +0 -0
  154. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/dict.py +0 -0
  155. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/dict.pyi +0 -0
  156. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/environments.py +0 -0
  157. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/environments.pyi +0 -0
  158. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/exception.py +0 -0
  159. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/experimental/__init__.py +0 -0
  160. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/experimental/flash.py +0 -0
  161. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/experimental/flash.pyi +0 -0
  162. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/experimental/ipython.py +0 -0
  163. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/file_io.py +0 -0
  164. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/file_io.pyi +0 -0
  165. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/file_pattern_matcher.py +0 -0
  166. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/functions.py +0 -0
  167. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/image.py +0 -0
  168. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/image.pyi +0 -0
  169. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/io_streams.py +0 -0
  170. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/io_streams.pyi +0 -0
  171. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/mount.py +0 -0
  172. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/mount.pyi +0 -0
  173. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/network_file_system.py +0 -0
  174. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/network_file_system.pyi +0 -0
  175. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/object.py +0 -0
  176. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/object.pyi +0 -0
  177. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/output.py +0 -0
  178. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/parallel_map.py +0 -0
  179. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/parallel_map.pyi +0 -0
  180. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/partial_function.py +0 -0
  181. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/partial_function.pyi +0 -0
  182. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/proxy.py +0 -0
  183. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/proxy.pyi +0 -0
  184. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/py.typed +0 -0
  185. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/queue.py +0 -0
  186. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/queue.pyi +0 -0
  187. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/retries.py +0 -0
  188. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/runner.py +0 -0
  189. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/runner.pyi +0 -0
  190. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/running_app.py +0 -0
  191. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/sandbox_fs.py +0 -0
  192. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/sandbox_fs.pyi +0 -0
  193. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/schedule.py +0 -0
  194. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/scheduler_placement.py +0 -0
  195. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/secret.py +0 -0
  196. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/secret.pyi +0 -0
  197. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/server.py +0 -0
  198. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/server.pyi +0 -0
  199. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/serving.py +0 -0
  200. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/serving.pyi +0 -0
  201. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/skills/modal/SKILL.md +0 -0
  202. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/snapshot.py +0 -0
  203. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/snapshot.pyi +0 -0
  204. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/stream_type.py +0 -0
  205. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/token_flow.py +0 -0
  206. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/token_flow.pyi +0 -0
  207. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/types.py +0 -0
  208. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/volume.py +0 -0
  209. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/volume.pyi +0 -0
  210. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/workspace.py +0 -0
  211. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal/workspace.pyi +0 -0
  212. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal.egg-info/SOURCES.txt +0 -0
  213. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal.egg-info/dependency_links.txt +0 -0
  214. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal.egg-info/entry_points.txt +0 -0
  215. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal.egg-info/requires.txt +0 -0
  216. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal.egg-info/top_level.txt +0 -0
  217. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/__init__.py +0 -0
  218. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/gen_cli_docs.py +0 -0
  219. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/gen_cli_docs_main.py +0 -0
  220. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/gen_reference_docs.py +0 -0
  221. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/gen_reference_docs_main.py +0 -0
  222. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/mdmd/__init__.py +0 -0
  223. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/mdmd/mdmd.py +0 -0
  224. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/mdmd/signatures.py +0 -0
  225. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/mdmd/types.py +0 -0
  226. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_docs/reference_intro.md +0 -0
  227. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/__init__.py +0 -0
  228. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/py.typed +0 -0
  229. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/task_command_router_grpc.py +0 -0
  230. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/task_command_router_pb2.py +0 -0
  231. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/task_command_router_pb2.pyi +0 -0
  232. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  233. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  234. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/modal_version/__main__.py +0 -0
  235. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/pyproject.toml +0 -0
  236. {modal-1.5.4.dev4 → modal-1.5.4.dev6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.4.dev4
3
+ Version: 1.5.4.dev6
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -37,7 +37,7 @@ class _Client:
37
37
  server_url: str,
38
38
  client_type: int,
39
39
  credentials: typing.Optional[tuple[str, str]],
40
- version: str = "1.5.4.dev4",
40
+ version: str = "1.5.4.dev6",
41
41
  ):
42
42
  """mdmd:hidden
43
43
  The Modal client object is not intended to be instantiated directly by users.
@@ -207,7 +207,7 @@ class Client:
207
207
  server_url: str,
208
208
  client_type: int,
209
209
  credentials: typing.Optional[tuple[str, str]],
210
- version: str = "1.5.4.dev4",
210
+ version: str = "1.5.4.dev6",
211
211
  ):
212
212
  """mdmd:hidden
213
213
  The Modal client object is not intended to be instantiated directly by users.
@@ -546,7 +546,7 @@ class Function(
546
546
 
547
547
  _call_generator: ___call_generator_spec
548
548
 
549
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
549
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
550
550
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
551
551
  """Calls the function remotely, executing it with the given arguments and returning the execution's result.
552
552
 
@@ -571,7 +571,7 @@ class Function(
571
571
  """
572
572
  ...
573
573
 
574
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
574
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
575
575
 
576
576
  class __remote_gen_spec(typing_extensions.Protocol):
577
577
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -621,7 +621,7 @@ class Function(
621
621
  """
622
622
  ...
623
623
 
624
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
624
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
625
625
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
626
626
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
627
627
 
@@ -654,7 +654,7 @@ class Function(
654
654
  """
655
655
  ...
656
656
 
657
- _experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
657
+ _experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
658
658
 
659
659
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
660
660
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
@@ -662,7 +662,7 @@ class Function(
662
662
 
663
663
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
664
664
 
665
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
665
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
666
666
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
667
667
  """Calls the function with the given arguments, without waiting for the results.
668
668
 
@@ -695,7 +695,7 @@ class Function(
695
695
  """
696
696
  ...
697
697
 
698
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
698
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
699
699
 
700
700
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
701
701
  """Return the inner Python object wrapped by this Modal Function.
@@ -80,7 +80,6 @@ from .stream_type import StreamType
80
80
  from .types import FileWatchEvent, FileWatchEventType, SandboxConnectCredentials
81
81
 
82
82
  _default_image: _Image = _Image.debian_slim()
83
- _EXIT_SNAPSHOT_POLL_INTERVAL_SECONDS = 1.0
84
83
  _EXIT_SNAPSHOT_NOT_FOUND_ERROR_CODES = frozenset((api_pb2.SandboxGetExitSnapshotResponse.ERROR_CODE_TIMEOUT,))
85
84
 
86
85
 
@@ -1415,13 +1414,12 @@ class _Sandbox(_Object, type_prefix="sb"):
1415
1414
  req = sr_pb2.TaskSetNetworkAccessRequest(task_id=task_id, network_access=network_access)
1416
1415
  await command_router_client.set_network_access(req)
1417
1416
 
1418
- async def _experimental_get_exit_snapshot(self, timeout: float | None = 60) -> _Image:
1417
+ async def _experimental_get_exit_snapshot(self, timeout: float | None = None) -> _Image:
1419
1418
  """Get the exit filesystem snapshot image.
1420
1419
 
1421
1420
  Args:
1422
- timeout: Client-side deadline in seconds (default 60). Use `None` to
1423
- poll until the snapshot reaches a terminal state. Use `0` to
1424
- perform an immediate check.
1421
+ timeout: Deadline in seconds. `None` polls until the snapshot reaches
1422
+ a terminal state. `0` performs an immediate check.
1425
1423
 
1426
1424
  Returns:
1427
1425
  The exit snapshot Image.
@@ -1443,17 +1441,20 @@ class _Sandbox(_Object, type_prefix="sb"):
1443
1441
 
1444
1442
  deadline = None if timeout is None else time.monotonic() + timeout
1445
1443
  timeout_message = f"timed out waiting for exit snapshot for Sandbox {self.object_id}"
1444
+ # Use the private __client so the lookup works with a detached sandbox
1445
+ client = self.__client
1446
1446
 
1447
1447
  while True:
1448
- resp: api_pb2.SandboxGetExitSnapshotResponse = await self._client.stub.SandboxGetExitSnapshot(
1449
- api_pb2.SandboxGetExitSnapshotRequest(sandbox_id=self.object_id)
1448
+ request_timeout = 10.0 if deadline is None else min(10.0, max(0.0, deadline - time.monotonic()))
1449
+ resp: api_pb2.SandboxGetExitSnapshotResponse = await client.stub.SandboxGetExitSnapshot(
1450
+ api_pb2.SandboxGetExitSnapshotRequest(sandbox_id=self.object_id, timeout=request_timeout)
1450
1451
  )
1451
1452
  outcome = resp.WhichOneof("outcome")
1452
1453
 
1453
1454
  if outcome == "success":
1454
1455
  if not resp.success.image_id:
1455
1456
  raise InternalError("Exit snapshot result is missing image ID")
1456
- return _Image._new_hydrated(resp.success.image_id, self._client, None)
1457
+ return _Image._new_hydrated(resp.success.image_id, client, None)
1457
1458
 
1458
1459
  if outcome == "error":
1459
1460
  if resp.error.error_code in _EXIT_SNAPSHOT_NOT_FOUND_ERROR_CODES:
@@ -1465,15 +1466,6 @@ class _Sandbox(_Object, type_prefix="sb"):
1465
1466
  if outcome != "pending":
1466
1467
  raise InternalError("Exit snapshot response is missing an outcome")
1467
1468
 
1468
- sleep_for = _EXIT_SNAPSHOT_POLL_INTERVAL_SECONDS
1469
- if deadline is not None:
1470
- remaining = deadline - time.monotonic()
1471
- if remaining <= 0:
1472
- raise TimeoutError(timeout_message)
1473
- sleep_for = min(sleep_for, remaining)
1474
-
1475
- await asyncio.sleep(sleep_for)
1476
-
1477
1469
  if deadline is not None and time.monotonic() >= deadline:
1478
1470
  raise TimeoutError(timeout_message)
1479
1471
 
@@ -1793,7 +1785,6 @@ class _Sandbox(_Object, type_prefix="sb"):
1793
1785
  Returns:
1794
1786
  URL and token credentials for connecting to the sandbox over HTTP.
1795
1787
  """
1796
- self._ensure_v1("create_connect_token")
1797
1788
  if user_metadata is not None and isinstance(user_metadata, dict):
1798
1789
  try:
1799
1790
  user_metadata = json.dumps(user_metadata)
@@ -1806,7 +1797,14 @@ class _Sandbox(_Object, type_prefix="sb"):
1806
1797
  req = api_pb2.SandboxCreateConnectTokenRequest(
1807
1798
  sandbox_id=self.object_id, user_metadata=user_metadata, port=port
1808
1799
  )
1809
- resp = await self._client.stub.SandboxCreateConnectToken(req)
1800
+ if self._is_v2:
1801
+ assert self._client._auth_token_manager
1802
+ auth_token = await self._client._auth_token_manager.get_token()
1803
+ resp = await self._client.stub.SandboxCreateConnectTokenV2(
1804
+ req, metadata=[("x-modal-auth-token", auth_token)]
1805
+ )
1806
+ else:
1807
+ resp = await self._client.stub.SandboxCreateConnectToken(req)
1810
1808
  return SandboxConnectCredentials(resp.url, resp.token)
1811
1809
 
1812
1810
  async def reload_volumes(self, *, timeout: int = 55) -> None:
@@ -573,13 +573,12 @@ class _Sandbox(modal._object._Object):
573
573
  """
574
574
  ...
575
575
 
576
- async def _experimental_get_exit_snapshot(self, timeout: typing.Optional[float] = 60) -> modal._image._Image:
576
+ async def _experimental_get_exit_snapshot(self, timeout: typing.Optional[float] = None) -> modal._image._Image:
577
577
  """Get the exit filesystem snapshot image.
578
578
 
579
579
  Args:
580
- timeout: Client-side deadline in seconds (default 60). Use `None` to
581
- poll until the snapshot reaches a terminal state. Use `0` to
582
- perform an immediate check.
580
+ timeout: Deadline in seconds. `None` polls until the snapshot reaches
581
+ a terminal state. `0` performs an immediate check.
583
582
 
584
583
  Returns:
585
584
  The exit snapshot Image.
@@ -2257,13 +2256,12 @@ class Sandbox(modal.object.Object):
2257
2256
  _experimental_set_outbound_network_policy: ___experimental_set_outbound_network_policy_spec
2258
2257
 
2259
2258
  class ___experimental_get_exit_snapshot_spec(typing_extensions.Protocol):
2260
- def __call__(self, /, timeout: typing.Optional[float] = 60) -> modal.image.Image:
2259
+ def __call__(self, /, timeout: typing.Optional[float] = None) -> modal.image.Image:
2261
2260
  """Get the exit filesystem snapshot image.
2262
2261
 
2263
2262
  Args:
2264
- timeout: Client-side deadline in seconds (default 60). Use `None` to
2265
- poll until the snapshot reaches a terminal state. Use `0` to
2266
- perform an immediate check.
2263
+ timeout: Deadline in seconds. `None` polls until the snapshot reaches
2264
+ a terminal state. `0` performs an immediate check.
2267
2265
 
2268
2266
  Returns:
2269
2267
  The exit snapshot Image.
@@ -2282,13 +2280,12 @@ class Sandbox(modal.object.Object):
2282
2280
  """
2283
2281
  ...
2284
2282
 
2285
- async def aio(self, /, timeout: typing.Optional[float] = 60) -> modal.image.Image:
2283
+ async def aio(self, /, timeout: typing.Optional[float] = None) -> modal.image.Image:
2286
2284
  """Get the exit filesystem snapshot image.
2287
2285
 
2288
2286
  Args:
2289
- timeout: Client-side deadline in seconds (default 60). Use `None` to
2290
- poll until the snapshot reaches a terminal state. Use `0` to
2291
- perform an immediate check.
2287
+ timeout: Deadline in seconds. `None` polls until the snapshot reaches
2288
+ a terminal state. `0` performs an immediate check.
2292
2289
 
2293
2290
  Returns:
2294
2291
  The exit snapshot Image.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.4.dev4
3
+ Version: 1.5.4.dev6
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -587,6 +587,10 @@ class ModalClientBase(abc.ABC):
587
587
  async def SandboxCreateConnectToken(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateConnectTokenRequest, modal_proto.api_pb2.SandboxCreateConnectTokenResponse]') -> None:
588
588
  pass
589
589
 
590
+ @abc.abstractmethod
591
+ async def SandboxCreateConnectTokenV2(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateConnectTokenRequest, modal_proto.api_pb2.SandboxCreateConnectTokenResponse]') -> None:
592
+ pass
593
+
590
594
  @abc.abstractmethod
591
595
  async def SandboxCreateV2(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateV2Request, modal_proto.api_pb2.SandboxCreateV2Response]') -> None:
592
596
  pass
@@ -1805,6 +1809,12 @@ class ModalClientBase(abc.ABC):
1805
1809
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
1806
1810
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
1807
1811
  ),
1812
+ '/modal.client.ModalClient/SandboxCreateConnectTokenV2': grpclib.const.Handler(
1813
+ self.SandboxCreateConnectTokenV2,
1814
+ grpclib.const.Cardinality.UNARY_UNARY,
1815
+ modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
1816
+ modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
1817
+ ),
1808
1818
  '/modal.client.ModalClient/SandboxCreateV2': grpclib.const.Handler(
1809
1819
  self.SandboxCreateV2,
1810
1820
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -3209,6 +3219,12 @@ class ModalClientStub:
3209
3219
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
3210
3220
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
3211
3221
  )
3222
+ self.SandboxCreateConnectTokenV2 = grpclib.client.UnaryUnaryMethod(
3223
+ channel,
3224
+ '/modal.client.ModalClient/SandboxCreateConnectTokenV2',
3225
+ modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
3226
+ modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
3227
+ )
3212
3228
  self.SandboxCreateV2 = grpclib.client.UnaryUnaryMethod(
3213
3229
  channel,
3214
3230
  '/modal.client.ModalClient/SandboxCreateV2',