modal 1.5.6.dev5__tar.gz → 1.5.6.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.6.dev5 → modal-1.5.6.dev6}/PKG-INFO +1 -1
  2. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/grpc_utils.py +17 -1
  3. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/task_command_router_client.py +1 -1
  4. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/client.pyi +2 -2
  5. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/sandbox.py +1 -1
  6. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_version/__init__.py +1 -1
  8. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/LICENSE +0 -0
  9. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/README.md +0 -0
  10. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/__init__.py +0 -0
  11. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/__main__.py +0 -0
  12. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_billing.py +0 -0
  13. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_clustered_functions.py +0 -0
  14. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_clustered_functions.pyi +0 -0
  15. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_container_entrypoint.py +0 -0
  16. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_environments.py +0 -0
  17. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_function_variants.py +0 -0
  18. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_functions.py +0 -0
  19. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_grpc_client.py +0 -0
  20. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_image.py +0 -0
  21. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_ipython.py +0 -0
  22. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_load_context.py +0 -0
  23. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_location.py +0 -0
  24. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_logs.py +0 -0
  25. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_logs_manager.py +0 -0
  26. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_logs_manager.pyi +0 -0
  27. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_object.py +0 -0
  28. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_output/__init__.py +0 -0
  29. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_output/manager.py +0 -0
  30. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_output/pty.py +0 -0
  31. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_output/rich.py +0 -0
  32. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_output/status.py +0 -0
  33. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_partial_function.py +0 -0
  34. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_resolver.py +0 -0
  35. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_resources.py +0 -0
  36. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/__init__.py +0 -0
  37. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/asgi.py +0 -0
  38. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/container_io_manager.py +0 -0
  39. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/container_io_manager.pyi +0 -0
  40. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/execution_context.py +0 -0
  41. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/execution_context.pyi +0 -0
  42. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  43. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/task_lifecycle_manager.py +0 -0
  44. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  45. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/telemetry.py +0 -0
  46. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/user_code_event_loop.py +0 -0
  47. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_runtime/user_code_imports.py +0 -0
  48. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_serialization.py +0 -0
  49. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_server.py +0 -0
  50. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_supports_logs.py +0 -0
  51. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_traceback.py +0 -0
  52. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_tunnel.py +0 -0
  53. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_tunnel.pyi +0 -0
  54. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_type_manager.py +0 -0
  55. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/__init__.py +0 -0
  56. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/app_utils.py +0 -0
  57. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/async_utils.py +0 -0
  58. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/auth_token_manager.py +0 -0
  59. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/blob_utils.py +0 -0
  60. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/browser_utils.py +0 -0
  61. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/bytes_io_segment_payload.py +0 -0
  62. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/curl_utils.py +0 -0
  63. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/deprecation.py +0 -0
  64. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/display_utils.py +0 -0
  65. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/docker_utils.py +0 -0
  66. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/function_utils.py +0 -0
  67. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/git_utils.py +0 -0
  68. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/grpc_testing.py +0 -0
  69. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/hash_utils.py +0 -0
  70. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/http_utils.py +0 -0
  71. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/jwt_utils.py +0 -0
  72. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/logger.py +0 -0
  73. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/mount_utils.py +0 -0
  74. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/name_utils.py +0 -0
  75. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/package_utils.py +0 -0
  76. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/pattern_utils.py +0 -0
  77. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/proxy_support.py +0 -0
  78. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/rand_pb_testing.py +0 -0
  79. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/sandbox_fs_utils.py +0 -0
  80. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/shell_utils.py +0 -0
  81. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_utils/time_utils.py +0 -0
  82. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_vendor/__init__.py +0 -0
  83. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  84. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_vendor/cloudpickle.py +0 -0
  85. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_vendor/tblib.py +0 -0
  86. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_vendor/version.py +0 -0
  87. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_watcher.py +0 -0
  88. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/_workspace.py +0 -0
  89. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/app.py +0 -0
  90. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/app.pyi +0 -0
  91. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/billing.py +0 -0
  92. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/billing.pyi +0 -0
  93. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/2023.12.312.txt +0 -0
  94. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/2023.12.txt +0 -0
  95. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/2024.04.txt +0 -0
  96. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/2024.10.txt +0 -0
  97. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/2025.06.txt +0 -0
  98. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/PREVIEW.txt +0 -0
  99. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/README.md +0 -0
  100. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/builder/base-images.json +0 -0
  101. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/call_graph.py +0 -0
  102. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/__init__.py +0 -0
  103. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/_download.py +0 -0
  104. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/_help.py +0 -0
  105. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/_traceback.py +0 -0
  106. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/app.py +0 -0
  107. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/billing.py +0 -0
  108. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/bootstrap.py +0 -0
  109. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/changelog.py +0 -0
  110. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/cluster.py +0 -0
  111. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/config.py +0 -0
  112. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/container.py +0 -0
  113. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/curl.py +0 -0
  114. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/dashboard.py +0 -0
  115. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/dict.py +0 -0
  116. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/endpoint.py +0 -0
  117. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/entry_point.py +0 -0
  118. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/environment.py +0 -0
  119. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/image.py +0 -0
  120. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/import_refs.py +0 -0
  121. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/launch.py +0 -0
  122. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/logo.py +0 -0
  123. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/network_file_system.py +0 -0
  124. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/profile.py +0 -0
  125. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/programs/__init__.py +0 -0
  126. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/programs/run_jupyter.py +0 -0
  127. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/programs/vscode.py +0 -0
  128. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/queues.py +0 -0
  129. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/run.py +0 -0
  130. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/secret.py +0 -0
  131. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/selector.py +0 -0
  132. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/shell.py +0 -0
  133. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/skills.py +0 -0
  134. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/token.py +0 -0
  135. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/utils.py +0 -0
  136. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/volume.py +0 -0
  137. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cli/workspace.py +0 -0
  138. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/client.py +0 -0
  139. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cloud_bucket_mount.py +0 -0
  140. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cloud_bucket_mount.pyi +0 -0
  141. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cls.py +0 -0
  142. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/cls.pyi +0 -0
  143. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/config.py +0 -0
  144. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/container_process.py +0 -0
  145. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/container_process.pyi +0 -0
  146. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/dict.py +0 -0
  147. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/dict.pyi +0 -0
  148. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/environments.py +0 -0
  149. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/environments.pyi +0 -0
  150. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/exception.py +0 -0
  151. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/experimental/__init__.py +0 -0
  152. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/experimental/flash.py +0 -0
  153. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/experimental/flash.pyi +0 -0
  154. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/experimental/ipython.py +0 -0
  155. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/file_io.py +0 -0
  156. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/file_io.pyi +0 -0
  157. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/file_pattern_matcher.py +0 -0
  158. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/functions.py +0 -0
  159. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/functions.pyi +0 -0
  160. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/image.py +0 -0
  161. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/image.pyi +0 -0
  162. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/io_streams.py +0 -0
  163. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/io_streams.pyi +0 -0
  164. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/mount.py +0 -0
  165. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/mount.pyi +0 -0
  166. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/network_file_system.py +0 -0
  167. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/network_file_system.pyi +0 -0
  168. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/object.py +0 -0
  169. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/object.pyi +0 -0
  170. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/output.py +0 -0
  171. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/parallel_map.py +0 -0
  172. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/parallel_map.pyi +0 -0
  173. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/partial_function.py +0 -0
  174. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/partial_function.pyi +0 -0
  175. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/proxy.py +0 -0
  176. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/proxy.pyi +0 -0
  177. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/py.typed +0 -0
  178. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/queue.py +0 -0
  179. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/queue.pyi +0 -0
  180. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/retries.py +0 -0
  181. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/runner.py +0 -0
  182. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/runner.pyi +0 -0
  183. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/running_app.py +0 -0
  184. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/sandbox.pyi +0 -0
  185. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/sandbox_fs.py +0 -0
  186. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/sandbox_fs.pyi +0 -0
  187. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/schedule.py +0 -0
  188. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/scheduler_placement.py +0 -0
  189. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/secret.py +0 -0
  190. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/secret.pyi +0 -0
  191. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/server.py +0 -0
  192. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/server.pyi +0 -0
  193. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/serving.py +0 -0
  194. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/serving.pyi +0 -0
  195. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/skills/modal/SKILL.md +0 -0
  196. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/snapshot.py +0 -0
  197. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/snapshot.pyi +0 -0
  198. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/stream_type.py +0 -0
  199. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/token_flow.py +0 -0
  200. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/token_flow.pyi +0 -0
  201. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/types.py +0 -0
  202. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/volume.py +0 -0
  203. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/volume.pyi +0 -0
  204. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/workspace.py +0 -0
  205. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal/workspace.pyi +0 -0
  206. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal.egg-info/SOURCES.txt +0 -0
  207. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal.egg-info/dependency_links.txt +0 -0
  208. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal.egg-info/entry_points.txt +0 -0
  209. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal.egg-info/requires.txt +0 -0
  210. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal.egg-info/top_level.txt +0 -0
  211. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/__init__.py +0 -0
  212. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/gen_cli_docs.py +0 -0
  213. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/gen_cli_docs_main.py +0 -0
  214. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/gen_reference_docs.py +0 -0
  215. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/gen_reference_docs_main.py +0 -0
  216. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/mdmd/__init__.py +0 -0
  217. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/mdmd/mdmd.py +0 -0
  218. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/mdmd/signatures.py +0 -0
  219. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/mdmd/types.py +0 -0
  220. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_docs/reference_intro.md +0 -0
  221. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/__init__.py +0 -0
  222. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/api_grpc.py +0 -0
  223. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/api_pb2.py +0 -0
  224. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/api_pb2.pyi +0 -0
  225. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/api_pb2_grpc.py +0 -0
  226. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/api_pb2_grpc.pyi +0 -0
  227. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/modal_api_grpc.py +0 -0
  228. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/py.typed +0 -0
  229. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/task_command_router_grpc.py +0 -0
  230. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/task_command_router_pb2.py +0 -0
  231. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/task_command_router_pb2.pyi +0 -0
  232. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  233. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  234. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/modal_version/__main__.py +0 -0
  235. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/pyproject.toml +0 -0
  236. {modal-1.5.6.dev5 → modal-1.5.6.dev6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.6.dev5
3
+ Version: 1.5.6.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
@@ -272,18 +272,34 @@ class CustomProtoStatusDetailsCodec(StatusDetailsCodecBase):
272
272
  custom_detail_codec = CustomProtoStatusDetailsCodec()
273
273
 
274
274
 
275
- def create_channel_config() -> grpclib.config.Configuration:
275
+ def create_channel_config(*, sustained_keepalive: bool = False) -> grpclib.config.Configuration:
276
276
  """Shared grpclib channel settings for Modal client connections.
277
277
 
278
278
  HTTP/2 keepalive probes keep idle transports warm through stateful
279
279
  middleboxes and surface dead connections before retries reuse them.
280
+
281
+ `sustained_keepalive` clears the two grpclib defaults such that a probe
282
+ actually goes out every `_keepalive_time`, for as long as the connection is
283
+ open.
280
284
  """
285
+ ping_throttle_overrides: dict[str, Any] = {}
286
+ if sustained_keepalive:
287
+ ping_throttle_overrides = {
288
+ # Default 2: probing stops after two probes with no request sent in
289
+ # between. Requests reset the count, acks don't. 0 = no cap.
290
+ "_http2_max_pings_without_data": 0,
291
+ # Default 300s floor between probes, applied regardless of data
292
+ # despite the name, so it has to stay under `_keepalive_time`.
293
+ "_http2_min_sent_ping_interval_without_data": GRPC_KEEPALIVE_TIME_SECS / 2,
294
+ }
295
+
281
296
  return grpclib.config.Configuration(
282
297
  _keepalive_time=GRPC_KEEPALIVE_TIME_SECS,
283
298
  _keepalive_timeout=GRPC_KEEPALIVE_TIMEOUT_SECS,
284
299
  _keepalive_permit_without_calls=True,
285
300
  http2_connection_window_size=GRPC_WINDOW_SIZE,
286
301
  http2_stream_window_size=GRPC_WINDOW_SIZE,
302
+ **ping_throttle_overrides,
287
303
  )
288
304
 
289
305
 
@@ -251,7 +251,7 @@ class TaskCommandRouterClient:
251
251
  host,
252
252
  port,
253
253
  ssl=ssl_context,
254
- config=create_channel_config(),
254
+ config=create_channel_config(sustained_keepalive=True),
255
255
  closed_error_message="Unable to perform operation on a detached sandbox",
256
256
  )
257
257
 
@@ -77,7 +77,7 @@ class _Client:
77
77
  server_url: str,
78
78
  client_type: int,
79
79
  credentials: typing.Optional[tuple[str, str]],
80
- version: str = "1.5.6.dev5",
80
+ version: str = "1.5.6.dev6",
81
81
  *,
82
82
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
83
83
  ):
@@ -277,7 +277,7 @@ class Client:
277
277
  server_url: str,
278
278
  client_type: int,
279
279
  credentials: typing.Optional[tuple[str, str]],
280
- version: str = "1.5.6.dev5",
280
+ version: str = "1.5.6.dev6",
281
281
  *,
282
282
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
283
283
  ):
@@ -2279,7 +2279,7 @@ class _Sandbox(_Object, type_prefix="sb"):
2279
2279
  command_router_client = await self._get_command_router_client(task_id)
2280
2280
  snap_v2_resp = await command_router_client.snapshot_memory(
2281
2281
  sr_pb2.TaskSnapshotMemoryRequest(task_id=task_id, idempotency_key=str(uuid.uuid4())),
2282
- timeout=55.0,
2282
+ timeout=165.0,
2283
2283
  )
2284
2284
  snapshot_id = snap_v2_resp.snapshot_id
2285
2285
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.6.dev5
3
+ Version: 1.5.6.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
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2026
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.5.6.dev5"
4
+ __version__ = "1.5.6.dev6"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes