modal 1.5.5.dev12__tar.gz → 1.5.5.dev13__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.5.dev12 → modal-1.5.5.dev13}/PKG-INFO +1 -1
  2. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/client.pyi +2 -2
  3. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/experimental/flash.py +23 -4
  4. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/experimental/flash.pyi +12 -6
  5. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal.egg-info/PKG-INFO +1 -1
  6. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_version/__init__.py +1 -1
  7. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/LICENSE +0 -0
  8. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/README.md +0 -0
  9. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/__init__.py +0 -0
  10. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/__main__.py +0 -0
  11. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_billing.py +0 -0
  12. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_clustered_functions.py +0 -0
  13. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_clustered_functions.pyi +0 -0
  14. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_container_entrypoint.py +0 -0
  15. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_environments.py +0 -0
  16. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_function_variants.py +0 -0
  17. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_functions.py +0 -0
  18. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_grpc_client.py +0 -0
  19. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_image.py +0 -0
  20. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_ipython.py +0 -0
  21. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_load_context.py +0 -0
  22. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_location.py +0 -0
  23. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_logs.py +0 -0
  24. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_logs_manager.py +0 -0
  25. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_logs_manager.pyi +0 -0
  26. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_object.py +0 -0
  27. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_output/__init__.py +0 -0
  28. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_output/manager.py +0 -0
  29. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_output/pty.py +0 -0
  30. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_output/rich.py +0 -0
  31. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_output/status.py +0 -0
  32. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_partial_function.py +0 -0
  33. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_resolver.py +0 -0
  34. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_resources.py +0 -0
  35. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/__init__.py +0 -0
  36. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/asgi.py +0 -0
  37. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/container_io_manager.py +0 -0
  38. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/container_io_manager.pyi +0 -0
  39. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/execution_context.py +0 -0
  40. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/execution_context.pyi +0 -0
  41. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  42. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/task_lifecycle_manager.py +0 -0
  43. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  44. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/telemetry.py +0 -0
  45. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/user_code_event_loop.py +0 -0
  46. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_runtime/user_code_imports.py +0 -0
  47. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_serialization.py +0 -0
  48. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_server.py +0 -0
  49. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_supports_logs.py +0 -0
  50. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_traceback.py +0 -0
  51. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_tunnel.py +0 -0
  52. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_tunnel.pyi +0 -0
  53. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_type_manager.py +0 -0
  54. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/__init__.py +0 -0
  55. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/app_utils.py +0 -0
  56. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/async_utils.py +0 -0
  57. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/auth_token_manager.py +0 -0
  58. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/blob_utils.py +0 -0
  59. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/browser_utils.py +0 -0
  60. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/bytes_io_segment_payload.py +0 -0
  61. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/curl_utils.py +0 -0
  62. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/deprecation.py +0 -0
  63. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/display_utils.py +0 -0
  64. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/docker_utils.py +0 -0
  65. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/function_utils.py +0 -0
  66. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/git_utils.py +0 -0
  67. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/grpc_testing.py +0 -0
  68. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/grpc_utils.py +0 -0
  69. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/hash_utils.py +0 -0
  70. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/http_utils.py +0 -0
  71. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/jwt_utils.py +0 -0
  72. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/logger.py +0 -0
  73. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/mount_utils.py +0 -0
  74. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/name_utils.py +0 -0
  75. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/package_utils.py +0 -0
  76. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/pattern_utils.py +0 -0
  77. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/proxy_support.py +0 -0
  78. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/rand_pb_testing.py +0 -0
  79. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/sandbox_fs_utils.py +0 -0
  80. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/shell_utils.py +0 -0
  81. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/task_command_router_client.py +0 -0
  82. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_utils/time_utils.py +0 -0
  83. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_vendor/__init__.py +0 -0
  84. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  85. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_vendor/cloudpickle.py +0 -0
  86. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_vendor/tblib.py +0 -0
  87. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_vendor/version.py +0 -0
  88. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_watcher.py +0 -0
  89. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/_workspace.py +0 -0
  90. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/app.py +0 -0
  91. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/app.pyi +0 -0
  92. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/billing.py +0 -0
  93. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/billing.pyi +0 -0
  94. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/2023.12.312.txt +0 -0
  95. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/2023.12.txt +0 -0
  96. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/2024.04.txt +0 -0
  97. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/2024.10.txt +0 -0
  98. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/2025.06.txt +0 -0
  99. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/PREVIEW.txt +0 -0
  100. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/README.md +0 -0
  101. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/builder/base-images.json +0 -0
  102. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/call_graph.py +0 -0
  103. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/__init__.py +0 -0
  104. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/_download.py +0 -0
  105. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/_help.py +0 -0
  106. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/_traceback.py +0 -0
  107. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/app.py +0 -0
  108. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/billing.py +0 -0
  109. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/bootstrap.py +0 -0
  110. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/changelog.py +0 -0
  111. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/cluster.py +0 -0
  112. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/config.py +0 -0
  113. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/container.py +0 -0
  114. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/curl.py +0 -0
  115. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/dashboard.py +0 -0
  116. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/dict.py +0 -0
  117. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/endpoint.py +0 -0
  118. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/entry_point.py +0 -0
  119. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/environment.py +0 -0
  120. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/image.py +0 -0
  121. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/import_refs.py +0 -0
  122. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/launch.py +0 -0
  123. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/logo.py +0 -0
  124. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/network_file_system.py +0 -0
  125. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/profile.py +0 -0
  126. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/programs/__init__.py +0 -0
  127. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/programs/run_jupyter.py +0 -0
  128. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/programs/vscode.py +0 -0
  129. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/queues.py +0 -0
  130. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/run.py +0 -0
  131. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/secret.py +0 -0
  132. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/selector.py +0 -0
  133. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/shell.py +0 -0
  134. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/skills.py +0 -0
  135. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/token.py +0 -0
  136. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/utils.py +0 -0
  137. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/volume.py +0 -0
  138. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cli/workspace.py +0 -0
  139. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/client.py +0 -0
  140. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cloud_bucket_mount.py +0 -0
  141. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cloud_bucket_mount.pyi +0 -0
  142. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cls.py +0 -0
  143. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/cls.pyi +0 -0
  144. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/config.py +0 -0
  145. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/container_process.py +0 -0
  146. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/container_process.pyi +0 -0
  147. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/dict.py +0 -0
  148. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/dict.pyi +0 -0
  149. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/environments.py +0 -0
  150. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/environments.pyi +0 -0
  151. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/exception.py +0 -0
  152. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/experimental/__init__.py +0 -0
  153. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/experimental/ipython.py +0 -0
  154. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/file_io.py +0 -0
  155. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/file_io.pyi +0 -0
  156. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/file_pattern_matcher.py +0 -0
  157. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/functions.py +0 -0
  158. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/functions.pyi +0 -0
  159. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/image.py +0 -0
  160. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/image.pyi +0 -0
  161. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/io_streams.py +0 -0
  162. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/io_streams.pyi +0 -0
  163. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/mount.py +0 -0
  164. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/mount.pyi +0 -0
  165. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/network_file_system.py +0 -0
  166. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/network_file_system.pyi +0 -0
  167. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/object.py +0 -0
  168. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/object.pyi +0 -0
  169. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/output.py +0 -0
  170. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/parallel_map.py +0 -0
  171. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/parallel_map.pyi +0 -0
  172. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/partial_function.py +0 -0
  173. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/partial_function.pyi +0 -0
  174. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/proxy.py +0 -0
  175. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/proxy.pyi +0 -0
  176. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/py.typed +0 -0
  177. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/queue.py +0 -0
  178. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/queue.pyi +0 -0
  179. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/retries.py +0 -0
  180. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/runner.py +0 -0
  181. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/runner.pyi +0 -0
  182. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/running_app.py +0 -0
  183. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/sandbox.py +0 -0
  184. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/sandbox.pyi +0 -0
  185. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/sandbox_fs.py +0 -0
  186. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/sandbox_fs.pyi +0 -0
  187. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/schedule.py +0 -0
  188. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/scheduler_placement.py +0 -0
  189. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/secret.py +0 -0
  190. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/secret.pyi +0 -0
  191. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/server.py +0 -0
  192. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/server.pyi +0 -0
  193. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/serving.py +0 -0
  194. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/serving.pyi +0 -0
  195. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/skills/modal/SKILL.md +0 -0
  196. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/snapshot.py +0 -0
  197. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/snapshot.pyi +0 -0
  198. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/stream_type.py +0 -0
  199. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/token_flow.py +0 -0
  200. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/token_flow.pyi +0 -0
  201. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/types.py +0 -0
  202. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/volume.py +0 -0
  203. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/volume.pyi +0 -0
  204. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/workspace.py +0 -0
  205. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal/workspace.pyi +0 -0
  206. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal.egg-info/SOURCES.txt +0 -0
  207. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal.egg-info/dependency_links.txt +0 -0
  208. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal.egg-info/entry_points.txt +0 -0
  209. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal.egg-info/requires.txt +0 -0
  210. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal.egg-info/top_level.txt +0 -0
  211. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/__init__.py +0 -0
  212. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/gen_cli_docs.py +0 -0
  213. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/gen_cli_docs_main.py +0 -0
  214. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/gen_reference_docs.py +0 -0
  215. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/gen_reference_docs_main.py +0 -0
  216. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/mdmd/__init__.py +0 -0
  217. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/mdmd/mdmd.py +0 -0
  218. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/mdmd/signatures.py +0 -0
  219. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/mdmd/types.py +0 -0
  220. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_docs/reference_intro.md +0 -0
  221. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/__init__.py +0 -0
  222. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/api_grpc.py +0 -0
  223. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/api_pb2.py +0 -0
  224. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/api_pb2.pyi +0 -0
  225. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/api_pb2_grpc.py +0 -0
  226. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/api_pb2_grpc.pyi +0 -0
  227. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/modal_api_grpc.py +0 -0
  228. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/py.typed +0 -0
  229. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/task_command_router_grpc.py +0 -0
  230. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/task_command_router_pb2.py +0 -0
  231. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/task_command_router_pb2.pyi +0 -0
  232. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  233. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  234. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/modal_version/__main__.py +0 -0
  235. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/pyproject.toml +0 -0
  236. {modal-1.5.5.dev12 → modal-1.5.5.dev13}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.5.dev12
3
+ Version: 1.5.5.dev13
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -38,7 +38,7 @@ class _Client:
38
38
  server_url: str,
39
39
  client_type: int,
40
40
  credentials: typing.Optional[tuple[str, str]],
41
- version: str = "1.5.5.dev12",
41
+ version: str = "1.5.5.dev13",
42
42
  ):
43
43
  """mdmd:hidden
44
44
  The Modal client object is not intended to be instantiated directly by users.
@@ -209,7 +209,7 @@ class Client:
209
209
  server_url: str,
210
210
  client_type: int,
211
211
  credentials: typing.Optional[tuple[str, str]],
212
- version: str = "1.5.5.dev12",
212
+ version: str = "1.5.5.dev13",
213
213
  ):
214
214
  """mdmd:hidden
215
215
  The Modal client object is not intended to be instantiated directly by users.
@@ -25,6 +25,7 @@ from ..client import _Client
25
25
  from ..config import logger
26
26
  from ..exception import InvalidError
27
27
 
28
+ _FLASH_UPSTREAM_HEADER = "modal-flash-upstream"
28
29
  _MAX_FAILURES = 10
29
30
 
30
31
 
@@ -337,9 +338,14 @@ class _FlashPrometheusAutoscaler:
337
338
  )
338
339
 
339
340
  self.autoscaler_thread: asyncio.Task | None = None
341
+ self._flash_service_url: str | None = None
340
342
 
341
343
  async def start(self):
342
344
  await self.fn.hydrate(client=self.client)
345
+ flash_service_urls = await self.fn._experimental_get_flash_urls()
346
+ if not flash_service_urls:
347
+ raise InvalidError(f"Could not find a Flash service URL for {self.app_name}.{self.cls_name}")
348
+ self._flash_service_url = flash_service_urls[0]
343
349
  self.autoscaler_thread = asyncio.create_task(self._run_autoscaler_loop())
344
350
 
345
351
  async def _run_autoscaler_loop(self):
@@ -496,13 +502,20 @@ class _FlashPrometheusAutoscaler:
496
502
  return desired_replicas
497
503
 
498
504
  async def _get_scaling_info(self, containers) -> tuple[float, int]:
499
- """Get metrics using container exposed metrics endpoints."""
505
+ """Get metrics from each container through the Flash service."""
506
+ if self._flash_service_url is None:
507
+ raise RuntimeError("Flash Prometheus autoscaler has not been started")
508
+
500
509
  sum_metric = 0
501
510
  n_containers_with_metrics = 0
511
+ metrics_url = f"{self._flash_service_url.rstrip('/')}/{self.metrics_endpoint.lstrip('/')}"
502
512
 
503
513
  container_metrics_list = await asyncio.gather(
504
514
  *[
505
- self._get_metrics(f"https://{container.host}:{container.port}/{self.metrics_endpoint}")
515
+ self._get_metrics(
516
+ metrics_url,
517
+ headers={_FLASH_UPSTREAM_HEADER: f"{container.host}:{container.port}"},
518
+ )
506
519
  for container in containers
507
520
  ]
508
521
  )
@@ -519,14 +532,20 @@ class _FlashPrometheusAutoscaler:
519
532
 
520
533
  return sum_metric, n_containers_with_metrics
521
534
 
522
- async def _get_metrics(self, url: str) -> dict[str, list[Any]] | None: # technically any should be Sample
535
+ async def _get_metrics(
536
+ self, url: str, headers: dict[str, str] | None = None
537
+ ) -> dict[str, list[Any]] | None: # technically any should be Sample
523
538
  import aiohttp
524
539
  from prometheus_client.parser import text_string_to_metric_families
525
540
  from prometheus_client.samples import Sample
526
541
 
527
542
  # Fetch the metrics from the endpoint
528
543
  try:
529
- response = await self.http_client.get(url, timeout=aiohttp.ClientTimeout(total=3))
544
+ response = await self.http_client.get(
545
+ url,
546
+ headers=headers,
547
+ timeout=aiohttp.ClientTimeout(total=3),
548
+ )
530
549
  response.raise_for_status()
531
550
  except asyncio.TimeoutError:
532
551
  logger.warning(f"[Modal Flash] Timeout getting metrics from {url}")
@@ -196,10 +196,12 @@ class _FlashPrometheusAutoscaler:
196
196
  ...
197
197
 
198
198
  async def _get_scaling_info(self, containers) -> tuple[float, int]:
199
- """Get metrics using container exposed metrics endpoints."""
199
+ """Get metrics from each container through the Flash service."""
200
200
  ...
201
201
 
202
- async def _get_metrics(self, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
202
+ async def _get_metrics(
203
+ self, url: str, headers: typing.Optional[dict[str, str]] = None
204
+ ) -> typing.Optional[dict[str, list[typing.Any]]]: ...
203
205
  async def _get_all_containers(self): ...
204
206
  async def _set_target_slots(self, target_slots: int): ...
205
207
  def _make_scaling_decision(
@@ -287,18 +289,22 @@ class FlashPrometheusAutoscaler:
287
289
 
288
290
  class ___get_scaling_info_spec(typing_extensions.Protocol):
289
291
  def __call__(self, /, containers) -> tuple[float, int]:
290
- """Get metrics using container exposed metrics endpoints."""
292
+ """Get metrics from each container through the Flash service."""
291
293
  ...
292
294
 
293
295
  async def aio(self, /, containers) -> tuple[float, int]:
294
- """Get metrics using container exposed metrics endpoints."""
296
+ """Get metrics from each container through the Flash service."""
295
297
  ...
296
298
 
297
299
  _get_scaling_info: ___get_scaling_info_spec
298
300
 
299
301
  class ___get_metrics_spec(typing_extensions.Protocol):
300
- def __call__(self, /, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
301
- async def aio(self, /, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
302
+ def __call__(
303
+ self, /, url: str, headers: typing.Optional[dict[str, str]] = None
304
+ ) -> typing.Optional[dict[str, list[typing.Any]]]: ...
305
+ async def aio(
306
+ self, /, url: str, headers: typing.Optional[dict[str, str]] = None
307
+ ) -> typing.Optional[dict[str, list[typing.Any]]]: ...
302
308
 
303
309
  _get_metrics: ___get_metrics_spec
304
310
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.5.dev12
3
+ Version: 1.5.5.dev13
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.5.dev12"
4
+ __version__ = "1.5.5.dev13"
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