modal 1.6.2.dev13__tar.gz → 1.6.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 (245) hide show
  1. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/PKG-INFO +1 -1
  2. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/auth_token_manager.py +8 -4
  3. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/client.pyi +2 -2
  4. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/functions.pyi +6 -6
  5. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_sandbox.py +11 -5
  6. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/sandbox.pyi +4 -4
  7. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/PKG-INFO +1 -1
  8. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2.py +846 -845
  9. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2.pyi +11 -1
  10. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_version/__init__.py +1 -1
  11. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/LICENSE +0 -0
  12. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/README.md +0 -0
  13. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/__init__.py +0 -0
  14. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/__main__.py +0 -0
  15. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_billing.py +0 -0
  16. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_cluster.py +0 -0
  17. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_cluster.pyi +0 -0
  18. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_container_entrypoint.py +0 -0
  19. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_environments.py +0 -0
  20. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_function_variants.py +0 -0
  21. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_functions.py +0 -0
  22. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_grpc_client.py +0 -0
  23. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_image.py +0 -0
  24. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_ipython.py +0 -0
  25. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_load_context.py +0 -0
  26. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_location.py +0 -0
  27. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_logs.py +0 -0
  28. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_logs_manager.py +0 -0
  29. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_logs_manager.pyi +0 -0
  30. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_metrics.py +0 -0
  31. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_metrics.pyi +0 -0
  32. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_object.py +0 -0
  33. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_outbound_policy.py +0 -0
  34. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_outbound_policy.pyi +0 -0
  35. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/__init__.py +0 -0
  36. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/manager.py +0 -0
  37. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/pty.py +0 -0
  38. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/rich.py +0 -0
  39. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/status.py +0 -0
  40. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_partial_function.py +0 -0
  41. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_resolver.py +0 -0
  42. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_resources.py +0 -0
  43. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/__init__.py +0 -0
  44. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/asgi.py +0 -0
  45. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/container_io_manager.py +0 -0
  46. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/container_io_manager.pyi +0 -0
  47. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/execution_context.py +0 -0
  48. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/execution_context.pyi +0 -0
  49. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  50. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/task_lifecycle_manager.py +0 -0
  51. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  52. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/telemetry.py +0 -0
  53. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/user_code_event_loop.py +0 -0
  54. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/user_code_imports.py +0 -0
  55. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_serialization.py +0 -0
  56. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_server.py +0 -0
  57. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_server.pyi +0 -0
  58. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_supports_logs.py +0 -0
  59. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_traceback.py +0 -0
  60. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_tunnel.py +0 -0
  61. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_tunnel.pyi +0 -0
  62. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_type_manager.py +0 -0
  63. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/__init__.py +0 -0
  64. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/app_utils.py +0 -0
  65. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/async_utils.py +0 -0
  66. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/blob_utils.py +0 -0
  67. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/browser_utils.py +0 -0
  68. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/bytes_io_segment_payload.py +0 -0
  69. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/curl_utils.py +0 -0
  70. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/deprecation.py +0 -0
  71. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/display_utils.py +0 -0
  72. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/docker_utils.py +0 -0
  73. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/function_utils.py +0 -0
  74. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/git_utils.py +0 -0
  75. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/grpc_testing.py +0 -0
  76. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/grpc_utils.py +0 -0
  77. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/hash_utils.py +0 -0
  78. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/http_utils.py +0 -0
  79. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/idle_countdown.py +0 -0
  80. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/jwt_utils.py +0 -0
  81. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/logger.py +0 -0
  82. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/mount_utils.py +0 -0
  83. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/name_utils.py +0 -0
  84. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/package_utils.py +0 -0
  85. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/pattern_utils.py +0 -0
  86. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/proxy_support.py +0 -0
  87. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/rand_pb_testing.py +0 -0
  88. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/sandbox_fs_utils.py +0 -0
  89. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/shell_utils.py +0 -0
  90. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/time_utils.py +0 -0
  91. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/__init__.py +0 -0
  92. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  93. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/cloudpickle.py +0 -0
  94. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/tblib.py +0 -0
  95. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/version.py +0 -0
  96. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_watcher.py +0 -0
  97. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_workspace.py +0 -0
  98. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/app.py +0 -0
  99. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/app.pyi +0 -0
  100. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/billing.py +0 -0
  101. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/billing.pyi +0 -0
  102. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2023.12.312.txt +0 -0
  103. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2023.12.txt +0 -0
  104. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2024.04.txt +0 -0
  105. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2024.10.txt +0 -0
  106. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2025.06.txt +0 -0
  107. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/PREVIEW.txt +0 -0
  108. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/README.md +0 -0
  109. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/base-images.json +0 -0
  110. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/call_graph.py +0 -0
  111. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/__init__.py +0 -0
  112. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_download.py +0 -0
  113. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_help.py +0 -0
  114. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_logs.py +0 -0
  115. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_stats.py +0 -0
  116. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_traceback.py +0 -0
  117. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/app.py +0 -0
  118. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/billing.py +0 -0
  119. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/changelog.py +0 -0
  120. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/config.py +0 -0
  121. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/container.py +0 -0
  122. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/curl.py +0 -0
  123. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/dashboard.py +0 -0
  124. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/dict.py +0 -0
  125. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/endpoint.py +0 -0
  126. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/entry_point.py +0 -0
  127. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/environment.py +0 -0
  128. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/function.py +0 -0
  129. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/image.py +0 -0
  130. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/import_refs.py +0 -0
  131. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/logo.py +0 -0
  132. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/network_file_system.py +0 -0
  133. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/profile.py +0 -0
  134. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/queues.py +0 -0
  135. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/run.py +0 -0
  136. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/secret.py +0 -0
  137. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/selector.py +0 -0
  138. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/server.py +0 -0
  139. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/shell.py +0 -0
  140. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/skills.py +0 -0
  141. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/token.py +0 -0
  142. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/utils.py +0 -0
  143. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/volume.py +0 -0
  144. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/workspace.py +0 -0
  145. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/client.py +0 -0
  146. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cloud_bucket_mount.py +0 -0
  147. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cloud_bucket_mount.pyi +0 -0
  148. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cls.py +0 -0
  149. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cls.pyi +0 -0
  150. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cluster.py +0 -0
  151. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cluster.pyi +0 -0
  152. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/config.py +0 -0
  153. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/container_process.py +0 -0
  154. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/container_process.pyi +0 -0
  155. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/dict.py +0 -0
  156. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/dict.pyi +0 -0
  157. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/environments.py +0 -0
  158. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/environments.pyi +0 -0
  159. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/exception.py +0 -0
  160. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/__init__.py +0 -0
  161. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/_flash_container_entry.py +0 -0
  162. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash.py +0 -0
  163. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash.pyi +0 -0
  164. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash_server.py +0 -0
  165. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash_server.pyi +0 -0
  166. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/ipython.py +0 -0
  167. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/file_pattern_matcher.py +0 -0
  168. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/functions.py +0 -0
  169. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/image.py +0 -0
  170. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/image.pyi +0 -0
  171. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/io_streams.py +0 -0
  172. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/io_streams.pyi +0 -0
  173. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/mount.py +0 -0
  174. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/mount.pyi +0 -0
  175. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/network_file_system.py +0 -0
  176. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/network_file_system.pyi +0 -0
  177. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/object.py +0 -0
  178. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/object.pyi +0 -0
  179. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/output.py +0 -0
  180. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/parallel_map.py +0 -0
  181. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/parallel_map.pyi +0 -0
  182. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/partial_function.py +0 -0
  183. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/partial_function.pyi +0 -0
  184. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/proxy.py +0 -0
  185. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/proxy.pyi +0 -0
  186. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/py.typed +0 -0
  187. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/queue.py +0 -0
  188. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/queue.pyi +0 -0
  189. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/retries.py +0 -0
  190. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/runner.py +0 -0
  191. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/runner.pyi +0 -0
  192. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/running_app.py +0 -0
  193. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/__init__.py +0 -0
  194. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_common.py +0 -0
  195. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_filesystem.py +0 -0
  196. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_sidecar.py +0 -0
  197. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_snapshot.py +0 -0
  198. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_task_command_router_client.py +0 -0
  199. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/sandbox.py +0 -0
  200. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/schedule.py +0 -0
  201. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/scheduler_placement.py +0 -0
  202. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/secret.py +0 -0
  203. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/secret.pyi +0 -0
  204. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/server.py +0 -0
  205. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/server.pyi +0 -0
  206. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/serving.py +0 -0
  207. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/serving.pyi +0 -0
  208. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/skills/modal/SKILL.md +0 -0
  209. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/stream_type.py +0 -0
  210. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/token_flow.py +0 -0
  211. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/token_flow.pyi +0 -0
  212. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/types.py +0 -0
  213. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/volume.py +0 -0
  214. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/volume.pyi +0 -0
  215. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/workspace.py +0 -0
  216. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/workspace.pyi +0 -0
  217. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/SOURCES.txt +0 -0
  218. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/dependency_links.txt +0 -0
  219. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/entry_points.txt +0 -0
  220. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/requires.txt +0 -0
  221. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/top_level.txt +0 -0
  222. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/__init__.py +0 -0
  223. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_cli_docs.py +0 -0
  224. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_cli_docs_main.py +0 -0
  225. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_reference_docs.py +0 -0
  226. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_reference_docs_main.py +0 -0
  227. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/__init__.py +0 -0
  228. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/mdmd.py +0 -0
  229. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/signatures.py +0 -0
  230. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/types.py +0 -0
  231. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/reference_intro.md +0 -0
  232. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/__init__.py +0 -0
  233. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_grpc.py +0 -0
  234. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2_grpc.py +0 -0
  235. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2_grpc.pyi +0 -0
  236. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/modal_api_grpc.py +0 -0
  237. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/py.typed +0 -0
  238. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_grpc.py +0 -0
  239. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2.py +0 -0
  240. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2.pyi +0 -0
  241. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  242. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  243. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_version/__main__.py +0 -0
  244. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/pyproject.toml +0 -0
  245. {modal-1.6.2.dev13 → modal-1.6.3.dev0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.2.dev13
3
+ Version: 1.6.3.dev0
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -98,8 +98,9 @@ class _AuthTokenManager:
98
98
  caller goes away.
99
99
  """
100
100
  if self._refresh_task is None:
101
- # Maybe another coroutine refreshed already, or we're cooling down after a failure.
102
- if self._token and not self._should_refresh():
101
+ # Maybe another coroutine refreshed already, or we're cooling down after a failure. The cooldown
102
+ # only applies while the cached token is still usable.
103
+ if self._has_valid_token() and not self._should_refresh():
103
104
  return
104
105
  # Note: the task is created in async code so it binds to the synchronicity event loop.
105
106
  self._refresh_task = asyncio.create_task(self._fetch_token())
@@ -121,12 +122,12 @@ class _AuthTokenManager:
121
122
  async def _fetch_token(self):
122
123
  """Fetch a new token and cache it, or arm the failure backoff."""
123
124
  try:
124
- # No cached token to fall back on, so a failure is user-visible: retry transient errors.
125
+ # Retry transient errors if the cached token is missing or expired.
125
126
  # Otherwise one attempt, and _retry_after handles the cooldown.
126
127
  retry = Retry(
127
128
  attempt_timeout=self.AUTH_TOKEN_TIMEOUT,
128
129
  total_timeout=self.AUTH_TOKEN_RETRY_TOTAL_TIMEOUT,
129
- max_retries=0 if self._token else DEFAULT_MAX_RETRIES,
130
+ max_retries=0 if self._has_valid_token() else DEFAULT_MAX_RETRIES,
130
131
  )
131
132
  token = await self._fetch(retry)
132
133
  if not token:
@@ -166,6 +167,9 @@ class _AuthTokenManager:
166
167
  except Exception as e:
167
168
  raise ValueError("Internal error: Cannot parse auth token. Please contact Modal support.") from e
168
169
 
170
+ def _has_valid_token(self):
171
+ return bool(self._token) and not self._is_expired()
172
+
169
173
  def _in_backoff(self):
170
174
  return time.time() < self._retry_after
171
175
 
@@ -80,7 +80,7 @@ class _Client:
80
80
  server_url: str,
81
81
  client_type: int,
82
82
  credentials: typing.Optional[tuple[str, str]],
83
- version: str = "1.6.2.dev13",
83
+ version: str = "1.6.3.dev0",
84
84
  *,
85
85
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
86
86
  ):
@@ -290,7 +290,7 @@ class Client:
290
290
  server_url: str,
291
291
  client_type: int,
292
292
  credentials: typing.Optional[tuple[str, str]],
293
- version: str = "1.6.2.dev13",
293
+ version: str = "1.6.3.dev0",
294
294
  *,
295
295
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
296
296
  ):
@@ -619,7 +619,7 @@ class Function(
619
619
 
620
620
  _call_generator: ___call_generator_spec
621
621
 
622
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
622
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
623
623
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
624
624
  """Calls the function remotely, executing it with the given arguments and returning the execution's result.
625
625
 
@@ -644,7 +644,7 @@ class Function(
644
644
  """
645
645
  ...
646
646
 
647
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
647
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
648
648
 
649
649
  class __remote_gen_spec(typing_extensions.Protocol):
650
650
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -694,7 +694,7 @@ class Function(
694
694
  """
695
695
  ...
696
696
 
697
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
697
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
698
698
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
699
699
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
700
700
 
@@ -727,7 +727,7 @@ class Function(
727
727
  """
728
728
  ...
729
729
 
730
- _experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
730
+ _experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
731
731
 
732
732
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
733
733
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
@@ -735,7 +735,7 @@ class Function(
735
735
 
736
736
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
737
737
 
738
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
738
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
739
739
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
740
740
  """Calls the function with the given arguments, without waiting for the results.
741
741
 
@@ -768,7 +768,7 @@ class Function(
768
768
  """
769
769
  ...
770
770
 
771
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
771
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
772
772
 
773
773
  @property
774
774
  def _raw_f_(self) -> collections.abc.Callable[..., typing.Any]: ...
@@ -112,6 +112,11 @@ _EXIT_SNAPSHOT_LONG_POLL_TIMEOUT = 10.0
112
112
  # client-side deadline.
113
113
  _EXIT_SNAPSHOT_POLL_DEADLINE_MARGIN = 5.0
114
114
 
115
+ # `Sandbox.wait` re-polls a server-side long poll of this many seconds. Each poll gets a network deadline
116
+ # with a margin over the hold, so a poll the server never answers fails and is retried instead of hanging.
117
+ _WAIT_LONG_POLL_TIMEOUT = 10.0
118
+ _WAIT_POLL_DEADLINE_MARGIN = 5.0
119
+
115
120
  # How long `Sandbox.create` waits for capacity before giving up.
116
121
  _SANDBOX_SCHEDULING_TIMEOUT: float = 21 * 60
117
122
 
@@ -484,8 +489,8 @@ class _Sandbox(_Object, type_prefix="sb"):
484
489
  wildcard prefixes (``*.``); a bare ``"*"`` allows all domains. The outbound policy
485
490
  can be replaced later via `Sandbox._experimental_set_outbound_network_policy`.
486
491
  inbound_cidr_allowlist:
487
- List of CIDRs allowed to connect inbound to the sandbox (tunnels and connection tokens). If None,
488
- all CIDRs are allowed.
492
+ List of CIDRs allowed to connect inbound to the sandbox (encrypted tunnels and connection tokens).
493
+ If None, all CIDRs are allowed.
489
494
  _experimental_outbound_policy: Configuration for replacing headers in outbound HTTPS requests from
490
495
  the Sandbox. Secrets referenced by the policy are resolved outside the Sandbox and are never
491
496
  visible to the workload. See `modal.experimental.OutboundPolicy`. This API is experimental and
@@ -1682,14 +1687,15 @@ class _Sandbox(_Object, type_prefix="sb"):
1682
1687
 
1683
1688
  """
1684
1689
 
1690
+ poll_retry = Retry(attempt_timeout=_WAIT_LONG_POLL_TIMEOUT + _WAIT_POLL_DEADLINE_MARGIN)
1685
1691
  while True:
1686
- req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=10)
1692
+ req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=_WAIT_LONG_POLL_TIMEOUT)
1687
1693
  # Use the private __client to allow `wait` to work with a detached sandbox
1688
1694
  stub = self.__client._stub
1689
1695
  if self._is_v2:
1690
- resp = await stub.SandboxWaitV2(req, metadata=await self._v2_metadata(self.__client))
1696
+ resp = await stub.SandboxWaitV2(req, retry=poll_retry, metadata=await self._v2_metadata(self.__client))
1691
1697
  else:
1692
- resp = await stub.SandboxWait(req)
1698
+ resp = await stub.SandboxWait(req, retry=poll_retry)
1693
1699
  if resp.result.status:
1694
1700
  logger.debug(f"Sandbox {self.object_id} wait completed with status {resp.result.status}")
1695
1701
  self._result = resp.result
@@ -1474,8 +1474,8 @@ class Sandbox(modal.object.Object):
1474
1474
  wildcard prefixes (``*.``); a bare ``"*"`` allows all domains. The outbound policy
1475
1475
  can be replaced later via `Sandbox._experimental_set_outbound_network_policy`.
1476
1476
  inbound_cidr_allowlist:
1477
- List of CIDRs allowed to connect inbound to the sandbox (tunnels and connection tokens). If None,
1478
- all CIDRs are allowed.
1477
+ List of CIDRs allowed to connect inbound to the sandbox (encrypted tunnels and connection tokens).
1478
+ If None, all CIDRs are allowed.
1479
1479
  _experimental_outbound_policy: Configuration for replacing headers in outbound HTTPS requests from
1480
1480
  the Sandbox. Secrets referenced by the policy are resolved outside the Sandbox and are never
1481
1481
  visible to the workload. See `modal.experimental.OutboundPolicy`. This API is experimental and
@@ -1598,8 +1598,8 @@ class Sandbox(modal.object.Object):
1598
1598
  wildcard prefixes (``*.``); a bare ``"*"`` allows all domains. The outbound policy
1599
1599
  can be replaced later via `Sandbox._experimental_set_outbound_network_policy`.
1600
1600
  inbound_cidr_allowlist:
1601
- List of CIDRs allowed to connect inbound to the sandbox (tunnels and connection tokens). If None,
1602
- all CIDRs are allowed.
1601
+ List of CIDRs allowed to connect inbound to the sandbox (encrypted tunnels and connection tokens).
1602
+ If None, all CIDRs are allowed.
1603
1603
  _experimental_outbound_policy: Configuration for replacing headers in outbound HTTPS requests from
1604
1604
  the Sandbox. Secrets referenced by the policy are resolved outside the Sandbox and are never
1605
1605
  visible to the workload. See `modal.experimental.OutboundPolicy`. This API is experimental and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.2.dev13
3
+ Version: 1.6.3.dev0
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0