modal 1.5.5.dev17__tar.gz → 1.5.6.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 (238) hide show
  1. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/PKG-INFO +1 -1
  2. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_function_variants.py +1 -1
  3. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_functions.py +17 -17
  4. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_image.py +5 -5
  5. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/function_utils.py +9 -9
  6. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/app.py +13 -11
  7. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/app.pyi +6 -6
  8. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/import_refs.py +1 -1
  9. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/run.py +3 -3
  10. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/client.pyi +2 -2
  11. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cls.py +3 -3
  12. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/experimental/__init__.py +0 -1
  13. modal-1.5.6.dev0/modal/experimental/flash.py +389 -0
  14. modal-1.5.6.dev0/modal/experimental/flash.pyi +235 -0
  15. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/functions.pyi +6 -6
  16. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/PKG-INFO +1 -1
  17. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_grpc.py +16 -0
  18. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2.py +1361 -1305
  19. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2.pyi +95 -0
  20. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2_grpc.py +33 -0
  21. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2_grpc.pyi +10 -0
  22. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/modal_api_grpc.py +1 -0
  23. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_version/__init__.py +1 -1
  24. modal-1.5.5.dev17/modal/experimental/flash.py +0 -833
  25. modal-1.5.5.dev17/modal/experimental/flash.pyi +0 -487
  26. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/LICENSE +0 -0
  27. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/README.md +0 -0
  28. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/__init__.py +0 -0
  29. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/__main__.py +0 -0
  30. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_billing.py +0 -0
  31. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_clustered_functions.py +0 -0
  32. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_clustered_functions.pyi +0 -0
  33. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_container_entrypoint.py +0 -0
  34. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_environments.py +0 -0
  35. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_grpc_client.py +0 -0
  36. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_ipython.py +0 -0
  37. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_load_context.py +0 -0
  38. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_location.py +0 -0
  39. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_logs.py +0 -0
  40. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_logs_manager.py +0 -0
  41. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_logs_manager.pyi +0 -0
  42. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_object.py +0 -0
  43. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/__init__.py +0 -0
  44. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/manager.py +0 -0
  45. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/pty.py +0 -0
  46. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/rich.py +0 -0
  47. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/status.py +0 -0
  48. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_partial_function.py +0 -0
  49. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_resolver.py +0 -0
  50. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_resources.py +0 -0
  51. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/__init__.py +0 -0
  52. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/asgi.py +0 -0
  53. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/container_io_manager.py +0 -0
  54. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/container_io_manager.pyi +0 -0
  55. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/execution_context.py +0 -0
  56. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/execution_context.pyi +0 -0
  57. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  58. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/task_lifecycle_manager.py +0 -0
  59. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  60. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/telemetry.py +0 -0
  61. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/user_code_event_loop.py +0 -0
  62. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/user_code_imports.py +0 -0
  63. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_serialization.py +0 -0
  64. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_server.py +0 -0
  65. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_supports_logs.py +0 -0
  66. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_traceback.py +0 -0
  67. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_tunnel.py +0 -0
  68. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_tunnel.pyi +0 -0
  69. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_type_manager.py +0 -0
  70. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/__init__.py +0 -0
  71. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/app_utils.py +0 -0
  72. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/async_utils.py +0 -0
  73. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/auth_token_manager.py +0 -0
  74. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/blob_utils.py +0 -0
  75. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/browser_utils.py +0 -0
  76. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/bytes_io_segment_payload.py +0 -0
  77. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/curl_utils.py +0 -0
  78. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/deprecation.py +0 -0
  79. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/display_utils.py +0 -0
  80. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/docker_utils.py +0 -0
  81. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/git_utils.py +0 -0
  82. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/grpc_testing.py +0 -0
  83. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/grpc_utils.py +0 -0
  84. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/hash_utils.py +0 -0
  85. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/http_utils.py +0 -0
  86. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/jwt_utils.py +0 -0
  87. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/logger.py +0 -0
  88. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/mount_utils.py +0 -0
  89. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/name_utils.py +0 -0
  90. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/package_utils.py +0 -0
  91. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/pattern_utils.py +0 -0
  92. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/proxy_support.py +0 -0
  93. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/rand_pb_testing.py +0 -0
  94. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/sandbox_fs_utils.py +0 -0
  95. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/shell_utils.py +0 -0
  96. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/task_command_router_client.py +0 -0
  97. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/time_utils.py +0 -0
  98. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/__init__.py +0 -0
  99. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  100. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/cloudpickle.py +0 -0
  101. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/tblib.py +0 -0
  102. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/version.py +0 -0
  103. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_watcher.py +0 -0
  104. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_workspace.py +0 -0
  105. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/billing.py +0 -0
  106. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/billing.pyi +0 -0
  107. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2023.12.312.txt +0 -0
  108. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2023.12.txt +0 -0
  109. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2024.04.txt +0 -0
  110. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2024.10.txt +0 -0
  111. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2025.06.txt +0 -0
  112. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/PREVIEW.txt +0 -0
  113. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/README.md +0 -0
  114. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/base-images.json +0 -0
  115. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/call_graph.py +0 -0
  116. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/__init__.py +0 -0
  117. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/_download.py +0 -0
  118. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/_help.py +0 -0
  119. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/_traceback.py +0 -0
  120. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/app.py +0 -0
  121. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/billing.py +0 -0
  122. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/bootstrap.py +0 -0
  123. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/changelog.py +0 -0
  124. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/cluster.py +0 -0
  125. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/config.py +0 -0
  126. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/container.py +0 -0
  127. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/curl.py +0 -0
  128. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/dashboard.py +0 -0
  129. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/dict.py +0 -0
  130. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/endpoint.py +0 -0
  131. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/entry_point.py +0 -0
  132. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/environment.py +0 -0
  133. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/image.py +0 -0
  134. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/launch.py +0 -0
  135. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/logo.py +0 -0
  136. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/network_file_system.py +0 -0
  137. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/profile.py +0 -0
  138. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/programs/__init__.py +0 -0
  139. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/programs/run_jupyter.py +0 -0
  140. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/programs/vscode.py +0 -0
  141. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/queues.py +0 -0
  142. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/secret.py +0 -0
  143. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/selector.py +0 -0
  144. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/shell.py +0 -0
  145. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/skills.py +0 -0
  146. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/token.py +0 -0
  147. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/utils.py +0 -0
  148. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/volume.py +0 -0
  149. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/workspace.py +0 -0
  150. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/client.py +0 -0
  151. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cloud_bucket_mount.py +0 -0
  152. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cloud_bucket_mount.pyi +0 -0
  153. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cls.pyi +0 -0
  154. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/config.py +0 -0
  155. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/container_process.py +0 -0
  156. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/container_process.pyi +0 -0
  157. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/dict.py +0 -0
  158. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/dict.pyi +0 -0
  159. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/environments.py +0 -0
  160. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/environments.pyi +0 -0
  161. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/exception.py +0 -0
  162. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/experimental/ipython.py +0 -0
  163. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/file_io.py +0 -0
  164. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/file_io.pyi +0 -0
  165. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/file_pattern_matcher.py +0 -0
  166. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/functions.py +0 -0
  167. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/image.py +0 -0
  168. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/image.pyi +0 -0
  169. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/io_streams.py +0 -0
  170. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/io_streams.pyi +0 -0
  171. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/mount.py +0 -0
  172. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/mount.pyi +0 -0
  173. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/network_file_system.py +0 -0
  174. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/network_file_system.pyi +0 -0
  175. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/object.py +0 -0
  176. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/object.pyi +0 -0
  177. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/output.py +0 -0
  178. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/parallel_map.py +0 -0
  179. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/parallel_map.pyi +0 -0
  180. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/partial_function.py +0 -0
  181. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/partial_function.pyi +0 -0
  182. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/proxy.py +0 -0
  183. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/proxy.pyi +0 -0
  184. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/py.typed +0 -0
  185. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/queue.py +0 -0
  186. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/queue.pyi +0 -0
  187. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/retries.py +0 -0
  188. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/runner.py +0 -0
  189. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/runner.pyi +0 -0
  190. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/running_app.py +0 -0
  191. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox.py +0 -0
  192. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox.pyi +0 -0
  193. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox_fs.py +0 -0
  194. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox_fs.pyi +0 -0
  195. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/schedule.py +0 -0
  196. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/scheduler_placement.py +0 -0
  197. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/secret.py +0 -0
  198. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/secret.pyi +0 -0
  199. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/server.py +0 -0
  200. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/server.pyi +0 -0
  201. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/serving.py +0 -0
  202. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/serving.pyi +0 -0
  203. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/skills/modal/SKILL.md +0 -0
  204. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/snapshot.py +0 -0
  205. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/snapshot.pyi +0 -0
  206. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/stream_type.py +0 -0
  207. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/token_flow.py +0 -0
  208. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/token_flow.pyi +0 -0
  209. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/types.py +0 -0
  210. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/volume.py +0 -0
  211. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/volume.pyi +0 -0
  212. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/workspace.py +0 -0
  213. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/workspace.pyi +0 -0
  214. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/SOURCES.txt +0 -0
  215. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/dependency_links.txt +0 -0
  216. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/entry_points.txt +0 -0
  217. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/requires.txt +0 -0
  218. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/top_level.txt +0 -0
  219. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/__init__.py +0 -0
  220. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_cli_docs.py +0 -0
  221. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_cli_docs_main.py +0 -0
  222. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_reference_docs.py +0 -0
  223. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_reference_docs_main.py +0 -0
  224. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/__init__.py +0 -0
  225. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/mdmd.py +0 -0
  226. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/signatures.py +0 -0
  227. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/types.py +0 -0
  228. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/reference_intro.md +0 -0
  229. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/__init__.py +0 -0
  230. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/py.typed +0 -0
  231. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_grpc.py +0 -0
  232. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2.py +0 -0
  233. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2.pyi +0 -0
  234. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  235. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  236. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_version/__main__.py +0 -0
  237. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/pyproject.toml +0 -0
  238. {modal-1.5.5.dev17 → modal-1.5.6.dev0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.5.dev17
3
+ Version: 1.5.6.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
@@ -290,6 +290,6 @@ def _make_function_variant(
290
290
  deps=_deps,
291
291
  load_context_overrides=base_function._load_context_overrides,
292
292
  )
293
- fun._info = base_function._info
293
+ fun._source_info = base_function._source_info
294
294
  fun._spec = base_function._spec # TODO (elias): fix - this is incorrect when using with_options
295
295
  return fun
@@ -50,7 +50,7 @@ from ._utils.deprecation import with_deprecation_warning
50
50
  from ._utils.function_utils import (
51
51
  ATTEMPT_TIMEOUT_GRACE_PERIOD,
52
52
  OUTPUTS_TIMEOUT,
53
- FunctionInfo,
53
+ FunctionSourceInfo,
54
54
  _create_input,
55
55
  _parse_retries,
56
56
  _process_result,
@@ -604,7 +604,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
604
604
  """
605
605
 
606
606
  # TODO: more type annotations
607
- _info: FunctionInfo | None
607
+ _source_info: FunctionSourceInfo | None
608
608
  _serve_mounts: frozenset[_Mount] # set at load time, only by loader
609
609
  _app: "modal.app._App | None" = None
610
610
  # only set for InstanceServiceFunctions and bound instance methods
@@ -665,7 +665,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
665
665
 
666
666
  @staticmethod
667
667
  def _from_local(
668
- info: FunctionInfo,
668
+ info: FunctionSourceInfo,
669
669
  app: "modal.app._App | None", # App here should only be None in case of Image.run_function
670
670
  image: _Image,
671
671
  env: dict[str, str | None] | None = None,
@@ -1170,7 +1170,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1170
1170
  )
1171
1171
 
1172
1172
  obj._raw_f = info.raw_f
1173
- obj._info = info
1173
+ obj._source_info = info
1174
1174
  obj._tag = tag
1175
1175
  obj._app = app # needed for CLI right now
1176
1176
  obj._obj = None
@@ -1429,14 +1429,14 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1429
1429
  (2026, 8, 26),
1430
1430
  "`Function.info` is deprecated and will be removed in `modal` version 1.6.0",
1431
1431
  )
1432
- def info(self) -> FunctionInfo:
1432
+ def info(self) -> FunctionSourceInfo:
1433
1433
  """mdmd:hidden"""
1434
- return self._info_
1434
+ return self._source_info_
1435
1435
 
1436
1436
  @property
1437
- def _info_(self) -> FunctionInfo:
1438
- assert self._info
1439
- return self._info
1437
+ def _source_info_(self) -> FunctionSourceInfo:
1438
+ assert self._source_info
1439
+ return self._source_info
1440
1440
 
1441
1441
  @property
1442
1442
  @with_deprecation_warning(
@@ -1477,7 +1477,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1477
1477
  self._is_generator = None
1478
1478
  self._web_url = None
1479
1479
  self._function_name = None
1480
- self._info = None
1480
+ self._source_info = None
1481
1481
  self._serve_mounts = frozenset()
1482
1482
  self._metadata = None
1483
1483
  self._experimental_flash_urls = None
@@ -1609,7 +1609,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1609
1609
  new_function._webhook_config = self._webhook_config
1610
1610
 
1611
1611
  # Other fields not necessarily initialized
1612
- if self._info is not None:
1612
+ if self._source_info is not None:
1613
1613
  new_function._build_args = self._build_args
1614
1614
  new_function._is_method = self._is_method
1615
1615
  new_function._raw_f = self._raw_f
@@ -1915,12 +1915,12 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1915
1915
  yield item
1916
1916
 
1917
1917
  def _is_local(self):
1918
- return self._info is not None
1918
+ return self._source_info is not None
1919
1919
 
1920
- def _get_info(self) -> FunctionInfo:
1921
- if not self._info:
1922
- raise ExecutionError("Can't get info for a function that isn't locally defined")
1923
- return self._info
1920
+ def _get_source_info(self) -> FunctionSourceInfo:
1921
+ if not self._source_info:
1922
+ raise ExecutionError("Can't get source info for a function that isn't locally defined")
1923
+ return self._source_info
1924
1924
 
1925
1925
  def _get_obj(self) -> "modal.cls._Obj | None":
1926
1926
  if not self._is_method:
@@ -1955,7 +1955,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1955
1955
  )
1956
1956
  raise ExecutionError(msg)
1957
1957
 
1958
- info = self._get_info()
1958
+ info = self._get_source_info()
1959
1959
  if not info.raw_f:
1960
1960
  # Here if calling .local on a service function itself which should never happen
1961
1961
  # TODO: check if we end up here in a container for a serialized function?
@@ -41,7 +41,7 @@ from ._utils.docker_utils import (
41
41
  extract_copy_command_patterns,
42
42
  find_dockerignore_file,
43
43
  )
44
- from ._utils.function_utils import FunctionInfo, parse_gpu_config
44
+ from ._utils.function_utils import FunctionSourceInfo, parse_gpu_config
45
45
  from ._utils.mount_utils import validate_only_modal_volumes, validate_volumes_by_object_id
46
46
  from ._utils.name_utils import check_object_name
47
47
  from .client import _Client
@@ -681,8 +681,8 @@ class _Image(_Object, type_prefix="im"):
681
681
 
682
682
  if build_function:
683
683
  build_function_id = build_function.object_id
684
- globals = build_function._get_info().get_globals()
685
- attrs = build_function._get_info().get_cls_var_attrs()
684
+ globals = build_function._get_source_info().get_globals()
685
+ attrs = build_function._get_source_info().get_cls_var_attrs()
686
686
  globals = {**globals, **attrs}
687
687
  filtered_globals = {}
688
688
  for k, v in globals.items():
@@ -694,7 +694,7 @@ class _Image(_Object, type_prefix="im"):
694
694
  # Skip unserializable values for now.
695
695
  logger.warning(
696
696
  f"Skipping unserializable global variable {k} for "
697
- f"{build_function._get_info().function_name}. "
697
+ f"{build_function._get_source_info().function_name}. "
698
698
  "Changes to this variable won't invalidate the image."
699
699
  )
700
700
  continue
@@ -2754,7 +2754,7 @@ class _Image(_Object, type_prefix="im"):
2754
2754
  # It may be possible to support lambdas eventually, but for now we don't handle them well, so reject quickly
2755
2755
  raise InvalidError("Image.run_function does not support lambda functions.")
2756
2756
 
2757
- info = FunctionInfo(raw_f)
2757
+ info = FunctionSourceInfo(raw_f)
2758
2758
 
2759
2759
  function = _Function._from_local(
2760
2760
  info,
@@ -48,7 +48,7 @@ if typing.TYPE_CHECKING:
48
48
  import modal._functions
49
49
 
50
50
 
51
- class FunctionInfoType(Enum):
51
+ class FunctionSourceInfoType(Enum):
52
52
  PACKAGE = "package"
53
53
  FILE = "file"
54
54
  SERIALIZED = "serialized"
@@ -162,7 +162,7 @@ def _parse_retries(
162
162
  raise InvalidError(msg)
163
163
 
164
164
 
165
- class FunctionInfo:
165
+ class FunctionSourceInfo:
166
166
  """Utility that determines serialization/deserialization mechanisms for functions
167
167
 
168
168
  * Stored as file vs serialized
@@ -178,7 +178,7 @@ class FunctionInfo:
178
178
  user_cls: type[Any] | None
179
179
  module_name: str | None
180
180
 
181
- _type: FunctionInfoType
181
+ _type: FunctionSourceInfoType
182
182
  _file: str | None
183
183
  _base_dir: str
184
184
  _remote_dir: PurePosixPath | None = None
@@ -245,7 +245,7 @@ class FunctionInfo:
245
245
  self.module_name = module.__spec__.name
246
246
  self._remote_dir = ROOT_DIR / PurePosixPath(module.__package__.split(".")[0])
247
247
  self._is_serialized = False
248
- self._type = FunctionInfoType.PACKAGE
248
+ self._type = FunctionSourceInfoType.PACKAGE
249
249
  elif hasattr(module, "__file__") and not serialized:
250
250
  # This generally covers the case where it's invoked with
251
251
  # python foo/bar/baz.py
@@ -255,16 +255,16 @@ class FunctionInfo:
255
255
  self.module_name = inspect.getmodulename(self._file)
256
256
  self._base_dir = os.path.dirname(self._file)
257
257
  self._is_serialized = False
258
- self._type = FunctionInfoType.FILE
258
+ self._type = FunctionSourceInfoType.FILE
259
259
  else:
260
260
  self.module_name = None
261
261
  self._base_dir = os.path.abspath("") # get current dir
262
262
  self._is_serialized = True # either explicitly, or by being in a notebook
263
263
  if serialized: # if explicit
264
- self._type = FunctionInfoType.SERIALIZED
264
+ self._type = FunctionSourceInfoType.SERIALIZED
265
265
  else:
266
266
  # notebook, or in general any exec() on a function definition
267
- self._type = FunctionInfoType.NOTEBOOK
267
+ self._type = FunctionSourceInfoType.NOTEBOOK
268
268
 
269
269
  if not self.is_serialized():
270
270
  # Sanity check that this function is defined in global scope
@@ -372,14 +372,14 @@ class FunctionInfo:
372
372
  return {}
373
373
 
374
374
  # make sure the function's own entrypoint is included:
375
- if self._type == FunctionInfoType.PACKAGE:
375
+ if self._type == FunctionSourceInfoType.PACKAGE:
376
376
  top_level_package = self.module_name.split(".")[0]
377
377
  # TODO: add deprecation warning if the following entrypoint mount
378
378
  # includes non-.py files, since we'll want to migrate to .py-only
379
379
  # soon to get it consistent with the `add_local_python_source()`
380
380
  # defaults.
381
381
  return {top_level_package: _Mount._from_local_python_packages(top_level_package)}
382
- elif self._type == FunctionInfoType.FILE:
382
+ elif self._type == FunctionSourceInfoType.FILE:
383
383
  # TODO: inspect if this file is already included as part of
384
384
  # a package mount, and skip it + reference that package
385
385
  # instead if that's the case. This avoids possible module
@@ -35,7 +35,7 @@ from ._supports_logs import _LogQueryData
35
35
  from ._utils.async_utils import synchronize_api
36
36
  from ._utils.deprecation import deprecation_warning, handle_deprecated_parameters, with_deprecation_warning
37
37
  from ._utils.function_utils import (
38
- FunctionInfo,
38
+ FunctionSourceInfo,
39
39
  is_flash_object,
40
40
  is_global_object,
41
41
  is_method_fn,
@@ -62,10 +62,10 @@ _default_image: _Image = _Image.debian_slim()
62
62
 
63
63
 
64
64
  class _LocalEntrypoint:
65
- _info: FunctionInfo
65
+ _info: FunctionSourceInfo
66
66
  _app: "_App"
67
67
 
68
- def __init__(self, info: FunctionInfo, app: "_App") -> None:
68
+ def __init__(self, info: FunctionSourceInfo, app: "_App") -> None:
69
69
  self._info = info
70
70
  self._app = app
71
71
 
@@ -73,7 +73,7 @@ class _LocalEntrypoint:
73
73
  return self._info.raw_f(*args, **kwargs)
74
74
 
75
75
  @property
76
- def info(self) -> FunctionInfo:
76
+ def info(self) -> FunctionSourceInfo:
77
77
  return self._info
78
78
 
79
79
  @property
@@ -627,8 +627,8 @@ class _App:
627
627
  logger.warning(
628
628
  f"Warning: function name '{function._tag_}' collision!"
629
629
  " Overriding existing function "
630
- f"[{old_function._info.module_name}].{old_function._info.function_name}"
631
- f" with new function [{function._info.module_name}].{function._info.function_name}"
630
+ f"[{old_function._source_info.module_name}].{old_function._source_info.function_name}"
631
+ f" with new function [{function._source_info.module_name}].{function._source_info.function_name}"
632
632
  )
633
633
  if function._tag_ in local_state.classes:
634
634
  logger.warning(f"Warning: tag {function._tag_} exists but is overridden by function")
@@ -803,7 +803,7 @@ class _App:
803
803
  raise InvalidError("Invalid value for `name`: Must be string.")
804
804
 
805
805
  def wrapped(raw_f: Callable[..., Any]) -> _LocalEntrypoint:
806
- info = FunctionInfo(raw_f)
806
+ info = FunctionSourceInfo(raw_f)
807
807
  tag = name if name is not None else raw_f.__qualname__
808
808
  local_state = self._local_state
809
809
  if tag in local_state.local_entrypoints:
@@ -962,7 +962,7 @@ class _App:
962
962
  rdma = f.params.rdma
963
963
  fabric_size = f.params.fabric_size
964
964
 
965
- info = FunctionInfo(f.raw_f, serialized=serialized, name_override=name)
965
+ info = FunctionSourceInfo(f.raw_f, serialized=serialized, name_override=name)
966
966
  raw_f = f.raw_f
967
967
  webhook_config = f.params.webhook_config
968
968
  is_generator = f.params.is_generator
@@ -1005,7 +1005,7 @@ class _App:
1005
1005
  )
1006
1006
  )
1007
1007
 
1008
- info = FunctionInfo(f, serialized=serialized, name_override=name)
1008
+ info = FunctionSourceInfo(f, serialized=serialized, name_override=name)
1009
1009
  raw_f = f
1010
1010
  webhook_config = None
1011
1011
  batch_max_size = None
@@ -1254,7 +1254,7 @@ class _App:
1254
1254
  ).values():
1255
1255
  raise InvalidError("Callable decorators cannot be combined with web interface decorators.")
1256
1256
 
1257
- info = FunctionInfo(None, serialized=serialized, user_cls=user_cls)
1257
+ info = FunctionSourceInfo(None, serialized=serialized, user_cls=user_cls)
1258
1258
 
1259
1259
  i6pn_enabled = i6pn or cluster_size is not None
1260
1260
  cls_func = _Function._from_local(
@@ -1466,7 +1466,9 @@ class _App:
1466
1466
  local_state = self._local_state
1467
1467
 
1468
1468
  # Create the FunctionInfo for the server, note we treat FunctionInfo as a class for servers
1469
- info = FunctionInfo(None, serialized=serialized, user_cls=user_cls, name_override=name or user_cls.__name__)
1469
+ info = FunctionSourceInfo(
1470
+ None, serialized=serialized, user_cls=user_cls, name_override=name or user_cls.__name__
1471
+ )
1470
1472
  # Create the service function
1471
1473
  service_function = _Function._from_local(
1472
1474
  info,
@@ -27,10 +27,10 @@ import typing
27
27
  import typing_extensions
28
28
 
29
29
  class _LocalEntrypoint:
30
- _info: modal._utils.function_utils.FunctionInfo
30
+ _info: modal._utils.function_utils.FunctionSourceInfo
31
31
  _app: _App
32
32
 
33
- def __init__(self, info: modal._utils.function_utils.FunctionInfo, app: _App) -> None:
33
+ def __init__(self, info: modal._utils.function_utils.FunctionSourceInfo, app: _App) -> None:
34
34
  """Initialize self. See help(type(self)) for accurate signature."""
35
35
  ...
36
36
 
@@ -39,18 +39,18 @@ class _LocalEntrypoint:
39
39
  ...
40
40
 
41
41
  @property
42
- def info(self) -> modal._utils.function_utils.FunctionInfo: ...
42
+ def info(self) -> modal._utils.function_utils.FunctionSourceInfo: ...
43
43
  @property
44
44
  def app(self) -> _App: ...
45
45
 
46
46
  class LocalEntrypoint:
47
- _info: modal._utils.function_utils.FunctionInfo
47
+ _info: modal._utils.function_utils.FunctionSourceInfo
48
48
  _app: App
49
49
 
50
- def __init__(self, info: modal._utils.function_utils.FunctionInfo, app: App) -> None: ...
50
+ def __init__(self, info: modal._utils.function_utils.FunctionSourceInfo, app: App) -> None: ...
51
51
  def __call__(self, *args: typing.Any, **kwargs: typing.Any) -> typing.Any: ...
52
52
  @property
53
- def info(self) -> modal._utils.function_utils.FunctionInfo: ...
53
+ def info(self) -> modal._utils.function_utils.FunctionSourceInfo: ...
54
54
  @property
55
55
  def app(self) -> App: ...
56
56
 
@@ -173,7 +173,7 @@ def list_cli_commands(
173
173
  priorities[local_entrypoint] = AutoRunPriority.APP_LOCAL_ENTRYPOINT
174
174
  for name, inner_function in app._local_state.functions.items():
175
175
  function = cast(Function, synchronizer._translate_out(inner_function))
176
- if function._info_.is_service_class() and not include_service_functions:
176
+ if function._source_info_.is_service_class() and not include_service_functions:
177
177
  continue # Skip class and server service functions for all commands except `modal shell`.
178
178
  all_runnables[function].append(f"{app_name}.{name}")
179
179
  priorities[function] = AutoRunPriority.APP_FUNCTION
@@ -263,9 +263,9 @@ def _get_click_command_for_function(app: App, function: Function, ctx: click.Con
263
263
  if function._is_generator_:
264
264
  raise InvalidError("`modal run` is not supported for generator functions")
265
265
 
266
- assert function._info_.raw_f
267
- sig: inspect.Signature = _get_signature(function._info_.raw_f)
268
- type_hints = safe_get_type_hints(function._info_.raw_f)
266
+ assert function._source_info_.raw_f
267
+ sig: inspect.Signature = _get_signature(function._source_info_.raw_f)
268
+ type_hints = safe_get_type_hints(function._source_info_.raw_f)
269
269
  signature: CliRunnableSignature = _get_cli_runnable_signature(sig, type_hints)
270
270
 
271
271
  def _inner(args, click_kwargs):
@@ -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.5.dev17",
80
+ version: str = "1.5.6.dev0",
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.5.dev17",
280
+ version: str = "1.5.6.dev0",
281
281
  *,
282
282
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
283
283
  ):
@@ -125,9 +125,9 @@ def _bind_instance_method(cls: "_Cls", service_function: _Function, method_name:
125
125
 
126
126
  if cls._is_local():
127
127
  partial_function = cls._method_partials[method_name]
128
- from modal._utils.function_utils import FunctionInfo
128
+ from modal._utils.function_utils import FunctionSourceInfo
129
129
 
130
- fun._info = FunctionInfo(
130
+ fun._source_info = FunctionSourceInfo(
131
131
  # ugly - needed for .local() TODO (elias): Clean up!
132
132
  partial_function.raw_f,
133
133
  user_cls=cls._user_cls,
@@ -242,7 +242,7 @@ class _Obj:
242
242
  load_context_overrides=parent._load_context_overrides,
243
243
  )
244
244
  fun._obj = self
245
- fun._info = parent._info
245
+ fun._source_info = parent._source_info
246
246
  fun._spec = parent._spec
247
247
 
248
248
  self._instance_service_function = fun
@@ -28,7 +28,6 @@ from ..secret import _Secret as _Secret
28
28
  from .flash import ( # noqa: F401
29
29
  flash_forward,
30
30
  flash_get_containers,
31
- flash_prometheus_autoscaler,
32
31
  http_server,
33
32
  )
34
33