modal 1.5.4.dev1__tar.gz → 1.5.4.dev2__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.dev1 → modal-1.5.4.dev2}/PKG-INFO +1 -1
  2. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_functions.py +29 -7
  3. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_server.py +7 -2
  4. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/client.pyi +2 -2
  5. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cls.py +7 -1
  6. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cls.pyi +16 -3
  7. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/functions.pyi +35 -5
  8. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/server.pyi +11 -2
  9. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/types.py +38 -0
  10. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal.egg-info/PKG-INFO +1 -1
  11. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_version/__init__.py +1 -1
  12. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/LICENSE +0 -0
  13. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/README.md +0 -0
  14. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/__init__.py +0 -0
  15. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/__main__.py +0 -0
  16. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_billing.py +0 -0
  17. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_clustered_functions.py +0 -0
  18. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_clustered_functions.pyi +0 -0
  19. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_container_entrypoint.py +0 -0
  20. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_environments.py +0 -0
  21. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_function_variants.py +0 -0
  22. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_grpc_client.py +0 -0
  23. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_image.py +0 -0
  24. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_ipython.py +0 -0
  25. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_load_context.py +0 -0
  26. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_location.py +0 -0
  27. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_logs.py +0 -0
  28. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_logs_manager.py +0 -0
  29. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_logs_manager.pyi +0 -0
  30. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_object.py +0 -0
  31. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_output/__init__.py +0 -0
  32. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_output/manager.py +0 -0
  33. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_output/pty.py +0 -0
  34. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_output/rich.py +0 -0
  35. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_output/status.py +0 -0
  36. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_partial_function.py +0 -0
  37. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_resolver.py +0 -0
  38. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_resources.py +0 -0
  39. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/__init__.py +0 -0
  40. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/asgi.py +0 -0
  41. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/container_io_manager.py +0 -0
  42. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/container_io_manager.pyi +0 -0
  43. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/execution_context.py +0 -0
  44. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/execution_context.pyi +0 -0
  45. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  46. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/task_lifecycle_manager.py +0 -0
  47. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  48. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/telemetry.py +0 -0
  49. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/user_code_event_loop.py +0 -0
  50. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_runtime/user_code_imports.py +0 -0
  51. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_serialization.py +0 -0
  52. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_supports_logs.py +0 -0
  53. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_traceback.py +0 -0
  54. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_tunnel.py +0 -0
  55. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_tunnel.pyi +0 -0
  56. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_type_manager.py +0 -0
  57. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/__init__.py +0 -0
  58. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/app_utils.py +0 -0
  59. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/async_utils.py +0 -0
  60. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/auth_token_manager.py +0 -0
  61. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/blob_utils.py +0 -0
  62. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/browser_utils.py +0 -0
  63. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/bytes_io_segment_payload.py +0 -0
  64. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/curl_utils.py +0 -0
  65. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/deprecation.py +0 -0
  66. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/display_utils.py +0 -0
  67. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/docker_utils.py +0 -0
  68. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/function_utils.py +0 -0
  69. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/git_utils.py +0 -0
  70. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/grpc_testing.py +0 -0
  71. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/grpc_utils.py +0 -0
  72. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/hash_utils.py +0 -0
  73. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/http_utils.py +0 -0
  74. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/jwt_utils.py +0 -0
  75. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/logger.py +0 -0
  76. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/mount_utils.py +0 -0
  77. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/name_utils.py +0 -0
  78. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/package_utils.py +0 -0
  79. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/pattern_utils.py +0 -0
  80. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/proxy_support.py +0 -0
  81. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/rand_pb_testing.py +0 -0
  82. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/sandbox_fs_utils.py +0 -0
  83. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/shell_utils.py +0 -0
  84. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/task_command_router_client.py +0 -0
  85. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_utils/time_utils.py +0 -0
  86. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_vendor/__init__.py +0 -0
  87. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  88. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_vendor/cloudpickle.py +0 -0
  89. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_vendor/tblib.py +0 -0
  90. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_vendor/version.py +0 -0
  91. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_watcher.py +0 -0
  92. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/_workspace.py +0 -0
  93. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/app.py +0 -0
  94. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/app.pyi +0 -0
  95. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/billing.py +0 -0
  96. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/billing.pyi +0 -0
  97. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/2023.12.312.txt +0 -0
  98. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/2023.12.txt +0 -0
  99. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/2024.04.txt +0 -0
  100. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/2024.10.txt +0 -0
  101. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/2025.06.txt +0 -0
  102. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/PREVIEW.txt +0 -0
  103. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/README.md +0 -0
  104. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/builder/base-images.json +0 -0
  105. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/call_graph.py +0 -0
  106. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/__init__.py +0 -0
  107. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/_download.py +0 -0
  108. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/_help.py +0 -0
  109. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/_traceback.py +0 -0
  110. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/app.py +0 -0
  111. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/billing.py +0 -0
  112. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/bootstrap.py +0 -0
  113. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/changelog.py +0 -0
  114. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/cluster.py +0 -0
  115. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/config.py +0 -0
  116. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/container.py +0 -0
  117. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/curl.py +0 -0
  118. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/dashboard.py +0 -0
  119. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/dict.py +0 -0
  120. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/endpoint.py +0 -0
  121. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/entry_point.py +0 -0
  122. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/environment.py +0 -0
  123. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/image.py +0 -0
  124. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/import_refs.py +0 -0
  125. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/launch.py +0 -0
  126. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/logo.py +0 -0
  127. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/network_file_system.py +0 -0
  128. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/profile.py +0 -0
  129. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/programs/__init__.py +0 -0
  130. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/programs/run_jupyter.py +0 -0
  131. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/programs/vscode.py +0 -0
  132. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/queues.py +0 -0
  133. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/run.py +0 -0
  134. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/secret.py +0 -0
  135. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/selector.py +0 -0
  136. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/shell.py +0 -0
  137. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/skills.py +0 -0
  138. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/token.py +0 -0
  139. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/utils.py +0 -0
  140. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/volume.py +0 -0
  141. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cli/workspace.py +0 -0
  142. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/client.py +0 -0
  143. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cloud_bucket_mount.py +0 -0
  144. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/cloud_bucket_mount.pyi +0 -0
  145. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/config.py +0 -0
  146. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/container_process.py +0 -0
  147. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/container_process.pyi +0 -0
  148. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/dict.py +0 -0
  149. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/dict.pyi +0 -0
  150. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/environments.py +0 -0
  151. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/environments.pyi +0 -0
  152. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/exception.py +0 -0
  153. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/experimental/__init__.py +0 -0
  154. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/experimental/flash.py +0 -0
  155. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/experimental/flash.pyi +0 -0
  156. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/experimental/ipython.py +0 -0
  157. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/file_io.py +0 -0
  158. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/file_io.pyi +0 -0
  159. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/file_pattern_matcher.py +0 -0
  160. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/functions.py +0 -0
  161. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/image.py +0 -0
  162. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/image.pyi +0 -0
  163. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/io_streams.py +0 -0
  164. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/io_streams.pyi +0 -0
  165. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/mount.py +0 -0
  166. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/mount.pyi +0 -0
  167. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/network_file_system.py +0 -0
  168. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/network_file_system.pyi +0 -0
  169. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/object.py +0 -0
  170. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/object.pyi +0 -0
  171. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/output.py +0 -0
  172. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/parallel_map.py +0 -0
  173. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/parallel_map.pyi +0 -0
  174. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/partial_function.py +0 -0
  175. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/partial_function.pyi +0 -0
  176. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/proxy.py +0 -0
  177. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/proxy.pyi +0 -0
  178. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/py.typed +0 -0
  179. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/queue.py +0 -0
  180. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/queue.pyi +0 -0
  181. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/retries.py +0 -0
  182. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/runner.py +0 -0
  183. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/runner.pyi +0 -0
  184. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/running_app.py +0 -0
  185. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/sandbox.py +0 -0
  186. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/sandbox.pyi +0 -0
  187. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/sandbox_fs.py +0 -0
  188. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/sandbox_fs.pyi +0 -0
  189. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/schedule.py +0 -0
  190. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/scheduler_placement.py +0 -0
  191. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/secret.py +0 -0
  192. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/secret.pyi +0 -0
  193. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/server.py +0 -0
  194. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/serving.py +0 -0
  195. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/serving.pyi +0 -0
  196. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/skills/modal/SKILL.md +0 -0
  197. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/snapshot.py +0 -0
  198. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/snapshot.pyi +0 -0
  199. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/stream_type.py +0 -0
  200. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/token_flow.py +0 -0
  201. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/token_flow.pyi +0 -0
  202. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/volume.py +0 -0
  203. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/volume.pyi +0 -0
  204. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/workspace.py +0 -0
  205. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal/workspace.pyi +0 -0
  206. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal.egg-info/SOURCES.txt +0 -0
  207. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal.egg-info/dependency_links.txt +0 -0
  208. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal.egg-info/entry_points.txt +0 -0
  209. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal.egg-info/requires.txt +0 -0
  210. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal.egg-info/top_level.txt +0 -0
  211. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/__init__.py +0 -0
  212. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/gen_cli_docs.py +0 -0
  213. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/gen_cli_docs_main.py +0 -0
  214. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/gen_reference_docs.py +0 -0
  215. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/gen_reference_docs_main.py +0 -0
  216. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/mdmd/__init__.py +0 -0
  217. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/mdmd/mdmd.py +0 -0
  218. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/mdmd/signatures.py +0 -0
  219. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/mdmd/types.py +0 -0
  220. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_docs/reference_intro.md +0 -0
  221. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/__init__.py +0 -0
  222. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/api_grpc.py +0 -0
  223. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/api_pb2.py +0 -0
  224. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/api_pb2.pyi +0 -0
  225. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/api_pb2_grpc.py +0 -0
  226. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/api_pb2_grpc.pyi +0 -0
  227. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/modal_api_grpc.py +0 -0
  228. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/py.typed +0 -0
  229. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/task_command_router_grpc.py +0 -0
  230. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/task_command_router_pb2.py +0 -0
  231. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/task_command_router_pb2.pyi +0 -0
  232. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  233. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  234. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/modal_version/__main__.py +0 -0
  235. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/pyproject.toml +0 -0
  236. {modal-1.5.4.dev1 → modal-1.5.4.dev2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.4.dev1
3
+ Version: 1.5.4.dev2
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -93,7 +93,7 @@ from .proxy import _Proxy
93
93
  from .retries import Retries, RetryManager
94
94
  from .schedule import Schedule
95
95
  from .secret import _Secret
96
- from .types import FunctionStats
96
+ from .types import FunctionAutoscalerSettings, FunctionStats, ServerAutoscalerSettings
97
97
  from .volume import _Volume, _volume_to_mount_proto
98
98
 
99
99
  if TYPE_CHECKING:
@@ -1172,6 +1172,25 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1172
1172
  return obj
1173
1173
 
1174
1174
  async def _update_autoscaler(
1175
+ self,
1176
+ *,
1177
+ min_containers: int | None = None,
1178
+ max_containers: int | None = None,
1179
+ buffer_containers: int | None = None,
1180
+ scaledown_window: int | None = None,
1181
+ ) -> FunctionAutoscalerSettings:
1182
+ settings = api_pb2.AutoscalerSettings(
1183
+ min_containers=min_containers,
1184
+ max_containers=max_containers,
1185
+ buffer_containers=buffer_containers,
1186
+ scaledown_window=scaledown_window,
1187
+ )
1188
+ request = api_pb2.FunctionUpdateSchedulingParamsRequest(function_id=self.object_id, settings=settings)
1189
+ response = await self.client.stub.FunctionUpdateSchedulingParams(request)
1190
+
1191
+ return FunctionAutoscalerSettings._from_proto(response.current_settings)
1192
+
1193
+ async def _update_autoscaler_server(
1175
1194
  self,
1176
1195
  *,
1177
1196
  min_containers: int | None = None,
@@ -1180,7 +1199,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1180
1199
  scaleup_window: int | None = None,
1181
1200
  scaledown_window: int | None = None,
1182
1201
  target_concurrency: int | None = None,
1183
- ) -> None:
1202
+ ) -> ServerAutoscalerSettings:
1184
1203
  settings = api_pb2.AutoscalerSettings(
1185
1204
  min_containers=min_containers,
1186
1205
  max_containers=max_containers,
@@ -1190,10 +1209,9 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1190
1209
  target_concurrency=target_concurrency,
1191
1210
  )
1192
1211
  request = api_pb2.FunctionUpdateSchedulingParamsRequest(function_id=self.object_id, settings=settings)
1193
- await self.client.stub.FunctionUpdateSchedulingParams(request)
1212
+ response = await self.client.stub.FunctionUpdateSchedulingParams(request)
1194
1213
 
1195
- # One idea would be for FunctionUpdateScheduleParams to return the current (coalesced) settings
1196
- # and then we could return them here (would need some ad hoc dataclass, which I don't love)
1214
+ return ServerAutoscalerSettings._from_proto(response.current_settings)
1197
1215
 
1198
1216
  @live_method
1199
1217
  async def update_autoscaler(
@@ -1203,7 +1221,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1203
1221
  max_containers: int | None = None,
1204
1222
  buffer_containers: int | None = None,
1205
1223
  scaledown_window: int | None = None,
1206
- ) -> None:
1224
+ ) -> FunctionAutoscalerSettings:
1207
1225
  """Override the current autoscaler behavior for this Function.
1208
1226
 
1209
1227
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -1218,6 +1236,10 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1218
1236
  buffer_containers: Extra containers to keep warm beyond current demand.
1219
1237
  scaledown_window: Maximum duration (in seconds) idle containers wait before scaling down.
1220
1238
 
1239
+ Returns:
1240
+ A `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
1241
+ of this Function after the call.
1242
+
1221
1243
  Examples:
1222
1244
  ```python notest
1223
1245
  f = modal.Function.from_name("my-app", "function")
@@ -1237,7 +1259,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1237
1259
  if self._is_method:
1238
1260
  raise InvalidError("Cannot call .update_autoscaler() on a method. Call it on the class instance instead.")
1239
1261
 
1240
- await self._update_autoscaler(
1262
+ return await self._update_autoscaler(
1241
1263
  min_containers=min_containers,
1242
1264
  max_containers=max_containers,
1243
1265
  buffer_containers=buffer_containers,
@@ -15,6 +15,7 @@ from ._supports_logs import _LogQueryData
15
15
  from .client import _Client
16
16
  from .cls import is_parameter
17
17
  from .exception import InvalidError
18
+ from .types import ServerAutoscalerSettings
18
19
 
19
20
  if typing.TYPE_CHECKING:
20
21
  import modal.app
@@ -129,7 +130,7 @@ class _Server:
129
130
  buffer_containers: int | None = None,
130
131
  scaleup_window: int | None = None,
131
132
  scaledown_window: int | None = None,
132
- ) -> None:
133
+ ) -> ServerAutoscalerSettings:
133
134
  """Override the current autoscaler behavior for this Server.
134
135
 
135
136
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -146,6 +147,10 @@ class _Server:
146
147
  scaleup_window: Seconds of sustained demand required before scaling up new containers.
147
148
  scaledown_window: Maximum duration (in seconds) idle containers wait before scaling down.
148
149
 
150
+ Returns:
151
+ A `ServerAutoscalerSettings` dataclass which contains the current autoscaler settings of
152
+ this Server after the call.
153
+
149
154
  Examples:
150
155
  ```python notest
151
156
  server = modal.Server.from_name("my-app", "Server")
@@ -167,7 +172,7 @@ class _Server:
167
172
  ```
168
173
 
169
174
  """
170
- return await self._get_service_function()._update_autoscaler(
175
+ return await self._get_service_function()._update_autoscaler_server(
171
176
  min_containers=min_containers,
172
177
  max_containers=max_containers,
173
178
  scaleup_window=scaleup_window,
@@ -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.dev1",
40
+ version: str = "1.5.4.dev2",
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.dev1",
210
+ version: str = "1.5.4.dev2",
211
211
  ):
212
212
  """mdmd:hidden
213
213
  The Modal client object is not intended to be instantiated directly by users.
@@ -33,6 +33,7 @@ from .cloud_bucket_mount import _CloudBucketMount
33
33
  from .exception import ExecutionError, InvalidError, NotFoundError
34
34
  from .retries import Retries
35
35
  from .secret import _Secret
36
+ from .types import FunctionAutoscalerSettings
36
37
  from .volume import _Volume
37
38
 
38
39
  T = TypeVar("T")
@@ -288,7 +289,7 @@ class _Obj:
288
289
  max_containers: int | None = None,
289
290
  scaledown_window: int | None = None,
290
291
  buffer_containers: int | None = None,
291
- ) -> None:
292
+ ) -> FunctionAutoscalerSettings:
292
293
  """Override the current autoscaler behavior for this Cls instance.
293
294
 
294
295
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -306,6 +307,10 @@ class _Obj:
306
307
  scaledown_window: Idle seconds before scaling down a container; omit to leave unchanged.
307
308
  buffer_containers: Extra idle containers under load; omit to leave unchanged.
308
309
 
310
+ Returns:
311
+ An `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
312
+ of this Cls instance after the call.
313
+
309
314
  Examples:
310
315
  ```python notest
311
316
  Model = modal.Cls.from_name("my-app", "Model")
@@ -321,6 +326,7 @@ class _Obj:
321
326
  """
322
327
  if not self._cls.is_hydrated and not self._cls._is_local():
323
328
  await self._cls.hydrate()
329
+
324
330
  return await self._cached_service_function().update_autoscaler(
325
331
  min_containers=min_containers,
326
332
  max_containers=max_containers,
@@ -13,6 +13,7 @@ import modal.object
13
13
  import modal.partial_function
14
14
  import modal.retries
15
15
  import modal.secret
16
+ import modal.types
16
17
  import modal.volume
17
18
  import modal_proto.api_pb2
18
19
  import pathlib
@@ -67,7 +68,7 @@ class _Obj:
67
68
  max_containers: typing.Optional[int] = None,
68
69
  scaledown_window: typing.Optional[int] = None,
69
70
  buffer_containers: typing.Optional[int] = None,
70
- ) -> None:
71
+ ) -> modal.types.FunctionAutoscalerSettings:
71
72
  """Override the current autoscaler behavior for this Cls instance.
72
73
 
73
74
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -85,6 +86,10 @@ class _Obj:
85
86
  scaledown_window: Idle seconds before scaling down a container; omit to leave unchanged.
86
87
  buffer_containers: Extra idle containers under load; omit to leave unchanged.
87
88
 
89
+ Returns:
90
+ An `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
91
+ of this Cls instance after the call.
92
+
88
93
  Examples:
89
94
  ```python notest
90
95
  Model = modal.Cls.from_name("my-app", "Model")
@@ -150,7 +155,7 @@ class Obj:
150
155
  max_containers: typing.Optional[int] = None,
151
156
  scaledown_window: typing.Optional[int] = None,
152
157
  buffer_containers: typing.Optional[int] = None,
153
- ) -> None:
158
+ ) -> modal.types.FunctionAutoscalerSettings:
154
159
  """Override the current autoscaler behavior for this Cls instance.
155
160
 
156
161
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -168,6 +173,10 @@ class Obj:
168
173
  scaledown_window: Idle seconds before scaling down a container; omit to leave unchanged.
169
174
  buffer_containers: Extra idle containers under load; omit to leave unchanged.
170
175
 
176
+ Returns:
177
+ An `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
178
+ of this Cls instance after the call.
179
+
171
180
  Examples:
172
181
  ```python notest
173
182
  Model = modal.Cls.from_name("my-app", "Model")
@@ -190,7 +199,7 @@ class Obj:
190
199
  max_containers: typing.Optional[int] = None,
191
200
  scaledown_window: typing.Optional[int] = None,
192
201
  buffer_containers: typing.Optional[int] = None,
193
- ) -> None:
202
+ ) -> modal.types.FunctionAutoscalerSettings:
194
203
  """Override the current autoscaler behavior for this Cls instance.
195
204
 
196
205
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -208,6 +217,10 @@ class Obj:
208
217
  scaledown_window: Idle seconds before scaling down a container; omit to leave unchanged.
209
218
  buffer_containers: Extra idle containers under load; omit to leave unchanged.
210
219
 
220
+ Returns:
221
+ An `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
222
+ of this Cls instance after the call.
223
+
211
224
  Examples:
212
225
  ```python notest
213
226
  Model = modal.Cls.from_name("my-app", "Model")
@@ -148,6 +148,28 @@ class Function(
148
148
  ...
149
149
 
150
150
  class ___update_autoscaler_spec(typing_extensions.Protocol):
151
+ def __call__(
152
+ self,
153
+ /,
154
+ *,
155
+ min_containers: typing.Optional[int] = None,
156
+ max_containers: typing.Optional[int] = None,
157
+ buffer_containers: typing.Optional[int] = None,
158
+ scaledown_window: typing.Optional[int] = None,
159
+ ) -> modal.types.FunctionAutoscalerSettings: ...
160
+ async def aio(
161
+ self,
162
+ /,
163
+ *,
164
+ min_containers: typing.Optional[int] = None,
165
+ max_containers: typing.Optional[int] = None,
166
+ buffer_containers: typing.Optional[int] = None,
167
+ scaledown_window: typing.Optional[int] = None,
168
+ ) -> modal.types.FunctionAutoscalerSettings: ...
169
+
170
+ _update_autoscaler: ___update_autoscaler_spec
171
+
172
+ class ___update_autoscaler_server_spec(typing_extensions.Protocol):
151
173
  def __call__(
152
174
  self,
153
175
  /,
@@ -158,7 +180,7 @@ class Function(
158
180
  scaleup_window: typing.Optional[int] = None,
159
181
  scaledown_window: typing.Optional[int] = None,
160
182
  target_concurrency: typing.Optional[int] = None,
161
- ) -> None: ...
183
+ ) -> modal.types.ServerAutoscalerSettings: ...
162
184
  async def aio(
163
185
  self,
164
186
  /,
@@ -169,9 +191,9 @@ class Function(
169
191
  scaleup_window: typing.Optional[int] = None,
170
192
  scaledown_window: typing.Optional[int] = None,
171
193
  target_concurrency: typing.Optional[int] = None,
172
- ) -> None: ...
194
+ ) -> modal.types.ServerAutoscalerSettings: ...
173
195
 
174
- _update_autoscaler: ___update_autoscaler_spec
196
+ _update_autoscaler_server: ___update_autoscaler_server_spec
175
197
 
176
198
  class __update_autoscaler_spec(typing_extensions.Protocol):
177
199
  def __call__(
@@ -182,7 +204,7 @@ class Function(
182
204
  max_containers: typing.Optional[int] = None,
183
205
  buffer_containers: typing.Optional[int] = None,
184
206
  scaledown_window: typing.Optional[int] = None,
185
- ) -> None:
207
+ ) -> modal.types.FunctionAutoscalerSettings:
186
208
  """Override the current autoscaler behavior for this Function.
187
209
 
188
210
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -197,6 +219,10 @@ class Function(
197
219
  buffer_containers: Extra containers to keep warm beyond current demand.
198
220
  scaledown_window: Maximum duration (in seconds) idle containers wait before scaling down.
199
221
 
222
+ Returns:
223
+ A `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
224
+ of this Function after the call.
225
+
200
226
  Examples:
201
227
  ```python notest
202
228
  f = modal.Function.from_name("my-app", "function")
@@ -221,7 +247,7 @@ class Function(
221
247
  max_containers: typing.Optional[int] = None,
222
248
  buffer_containers: typing.Optional[int] = None,
223
249
  scaledown_window: typing.Optional[int] = None,
224
- ) -> None:
250
+ ) -> modal.types.FunctionAutoscalerSettings:
225
251
  """Override the current autoscaler behavior for this Function.
226
252
 
227
253
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -236,6 +262,10 @@ class Function(
236
262
  buffer_containers: Extra containers to keep warm beyond current demand.
237
263
  scaledown_window: Maximum duration (in seconds) idle containers wait before scaling down.
238
264
 
265
+ Returns:
266
+ A `FunctionAutoscalerSettings` dataclass which contains the current autoscaler settings
267
+ of this Function after the call.
268
+
239
269
  Examples:
240
270
  ```python notest
241
271
  f = modal.Function.from_name("my-app", "function")
@@ -4,6 +4,7 @@ import modal.app
4
4
  import modal.client
5
5
  import modal.functions
6
6
  import modal.partial_function
7
+ import modal.types
7
8
  import typing
8
9
  import typing_extensions
9
10
 
@@ -86,7 +87,7 @@ class Server:
86
87
  buffer_containers: typing.Optional[int] = None,
87
88
  scaleup_window: typing.Optional[int] = None,
88
89
  scaledown_window: typing.Optional[int] = None,
89
- ) -> None:
90
+ ) -> modal.types.ServerAutoscalerSettings:
90
91
  """Override the current autoscaler behavior for this Server.
91
92
 
92
93
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -103,6 +104,10 @@ class Server:
103
104
  scaleup_window: Seconds of sustained demand required before scaling up new containers.
104
105
  scaledown_window: Maximum duration (in seconds) idle containers wait before scaling down.
105
106
 
107
+ Returns:
108
+ A `ServerAutoscalerSettings` dataclass which contains the current autoscaler settings of
109
+ this Server after the call.
110
+
106
111
  Examples:
107
112
  ```python notest
108
113
  server = modal.Server.from_name("my-app", "Server")
@@ -135,7 +140,7 @@ class Server:
135
140
  buffer_containers: typing.Optional[int] = None,
136
141
  scaleup_window: typing.Optional[int] = None,
137
142
  scaledown_window: typing.Optional[int] = None,
138
- ) -> None:
143
+ ) -> modal.types.ServerAutoscalerSettings:
139
144
  """Override the current autoscaler behavior for this Server.
140
145
 
141
146
  Unspecified parameters will retain their current value, i.e. either the static value
@@ -152,6 +157,10 @@ class Server:
152
157
  scaleup_window: Seconds of sustained demand required before scaling up new containers.
153
158
  scaledown_window: Maximum duration (in seconds) idle containers wait before scaling down.
154
159
 
160
+ Returns:
161
+ A `ServerAutoscalerSettings` dataclass which contains the current autoscaler settings of
162
+ this Server after the call.
163
+
155
164
  Examples:
156
165
  ```python notest
157
166
  server = modal.Server.from_name("my-app", "Server")
@@ -367,3 +367,41 @@ class EnvironmentBillingSummary:
367
367
  metered_cost=Decimal(pb_item.metered_cost),
368
368
  metered_cost_breakdown=metered_cost_breakdown,
369
369
  )
370
+
371
+
372
+ @dataclass(slots=True, frozen=True)
373
+ class FunctionAutoscalerSettings:
374
+ min_containers: int | None
375
+ max_containers: int | None
376
+ scaledown_window: int | None
377
+ buffer_containers: int | None
378
+
379
+ @classmethod
380
+ def _from_proto(cls, pb_item: api_pb2.AutoscalerSettings) -> "FunctionAutoscalerSettings":
381
+ return cls(
382
+ min_containers=pb_item.min_containers if pb_item.HasField("min_containers") else None,
383
+ max_containers=pb_item.max_containers if pb_item.HasField("max_containers") else None,
384
+ scaledown_window=pb_item.scaledown_window if pb_item.HasField("scaledown_window") else None,
385
+ buffer_containers=pb_item.buffer_containers if pb_item.HasField("buffer_containers") else None,
386
+ )
387
+
388
+
389
+ @dataclass(slots=True, frozen=True)
390
+ class ServerAutoscalerSettings:
391
+ target_concurrency: int | None
392
+ min_containers: int | None
393
+ max_containers: int | None
394
+ buffer_containers: int | None
395
+ scaleup_window: int | None
396
+ scaledown_window: int | None
397
+
398
+ @classmethod
399
+ def _from_proto(cls, pb_item: api_pb2.AutoscalerSettings) -> "ServerAutoscalerSettings":
400
+ return cls(
401
+ min_containers=pb_item.min_containers if pb_item.HasField("min_containers") else None,
402
+ max_containers=pb_item.max_containers if pb_item.HasField("max_containers") else None,
403
+ buffer_containers=pb_item.buffer_containers if pb_item.HasField("buffer_containers") else None,
404
+ scaleup_window=pb_item.scaleup_window if pb_item.HasField("scaleup_window") else None,
405
+ scaledown_window=pb_item.scaledown_window if pb_item.HasField("scaledown_window") else None,
406
+ target_concurrency=pb_item.target_concurrency if pb_item.HasField("target_concurrency") else None,
407
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.4.dev1
3
+ Version: 1.5.4.dev2
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.4.dev1"
4
+ __version__ = "1.5.4.dev2"
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