modAL 1.6.3.dev7__tar.gz → 1.6.3.dev8__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 (248) hide show
  1. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/PKG-INFO +1 -1
  2. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_image.py +45 -5
  3. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/client.pyi +2 -2
  4. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/functions.pyi +6 -6
  5. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/PKG-INFO +1 -1
  6. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2.py +1376 -1376
  7. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2.pyi +20 -5
  8. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_version/__init__.py +1 -1
  9. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/LICENSE +0 -0
  10. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/README.md +0 -0
  11. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/__init__.py +0 -0
  12. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/__main__.py +0 -0
  13. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_billing.py +0 -0
  14. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_cluster.py +0 -0
  15. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_cluster.pyi +0 -0
  16. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_container_entrypoint.py +0 -0
  17. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_environments.py +0 -0
  18. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_function_variants.py +0 -0
  19. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_functions.py +0 -0
  20. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_grpc_client.py +0 -0
  21. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_ipython.py +0 -0
  22. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_load_context.py +0 -0
  23. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_location.py +0 -0
  24. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_logs.py +0 -0
  25. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_logs_manager.py +0 -0
  26. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_logs_manager.pyi +0 -0
  27. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_metrics.py +0 -0
  28. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_metrics.pyi +0 -0
  29. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_object.py +0 -0
  30. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_outbound_policy.py +0 -0
  31. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_outbound_policy.pyi +0 -0
  32. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/__init__.py +0 -0
  33. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/manager.py +0 -0
  34. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/pty.py +0 -0
  35. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/rich.py +0 -0
  36. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/status.py +0 -0
  37. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_partial_function.py +0 -0
  38. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_resolver.py +0 -0
  39. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_resources.py +0 -0
  40. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/__init__.py +0 -0
  41. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/asgi.py +0 -0
  42. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/container_io_manager.py +0 -0
  43. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/container_io_manager.pyi +0 -0
  44. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/execution_context.py +0 -0
  45. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/execution_context.pyi +0 -0
  46. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  47. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/task_lifecycle_manager.py +0 -0
  48. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  49. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/telemetry.py +0 -0
  50. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/user_code_event_loop.py +0 -0
  51. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/user_code_imports.py +0 -0
  52. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_serialization.py +0 -0
  53. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_server.py +0 -0
  54. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_server.pyi +0 -0
  55. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_supports_logs.py +0 -0
  56. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_traceback.py +0 -0
  57. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_tunnel.py +0 -0
  58. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_tunnel.pyi +0 -0
  59. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_type_manager.py +0 -0
  60. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/__init__.py +0 -0
  61. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/app_utils.py +0 -0
  62. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/async_utils.py +0 -0
  63. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/auth_token_manager.py +0 -0
  64. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/blob_utils.py +0 -0
  65. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/browser_utils.py +0 -0
  66. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/bytes_io_segment_payload.py +0 -0
  67. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/curl_utils.py +0 -0
  68. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/deprecation.py +0 -0
  69. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/display_utils.py +0 -0
  70. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/docker_utils.py +0 -0
  71. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/function_utils.py +0 -0
  72. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/git_utils.py +0 -0
  73. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/grpc_testing.py +0 -0
  74. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/grpc_utils.py +0 -0
  75. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/hash_utils.py +0 -0
  76. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/http_utils.py +0 -0
  77. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/idle_countdown.py +0 -0
  78. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/jwt_utils.py +0 -0
  79. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/logger.py +0 -0
  80. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/mount_utils.py +0 -0
  81. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/name_utils.py +0 -0
  82. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/package_utils.py +0 -0
  83. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/pattern_utils.py +0 -0
  84. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/proxy_support.py +0 -0
  85. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/rand_pb_testing.py +0 -0
  86. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/sandbox_fs_utils.py +0 -0
  87. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/shell_utils.py +0 -0
  88. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/time_utils.py +0 -0
  89. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/__init__.py +0 -0
  90. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  91. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/cloudpickle.py +0 -0
  92. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/tblib.py +0 -0
  93. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/version.py +0 -0
  94. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_watcher.py +0 -0
  95. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_workspace.py +0 -0
  96. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/app.py +0 -0
  97. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/app.pyi +0 -0
  98. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/billing.py +0 -0
  99. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/billing.pyi +0 -0
  100. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2023.12.312.txt +0 -0
  101. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2023.12.txt +0 -0
  102. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2024.04.txt +0 -0
  103. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2024.10.txt +0 -0
  104. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2025.06.txt +0 -0
  105. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/PREVIEW.txt +0 -0
  106. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/README.md +0 -0
  107. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/base-images.json +0 -0
  108. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/call_graph.py +0 -0
  109. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/__init__.py +0 -0
  110. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_download.py +0 -0
  111. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_help.py +0 -0
  112. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_logs.py +0 -0
  113. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_stats.py +0 -0
  114. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_traceback.py +0 -0
  115. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/app.py +0 -0
  116. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/billing.py +0 -0
  117. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/changelog.py +0 -0
  118. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/config.py +0 -0
  119. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/container.py +0 -0
  120. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/curl.py +0 -0
  121. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/dashboard.py +0 -0
  122. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/dict.py +0 -0
  123. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/endpoint.py +0 -0
  124. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/entry_point.py +0 -0
  125. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/environment.py +0 -0
  126. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/function.py +0 -0
  127. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/image.py +0 -0
  128. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/import_refs.py +0 -0
  129. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/logo.py +0 -0
  130. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/network_file_system.py +0 -0
  131. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/profile.py +0 -0
  132. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/queues.py +0 -0
  133. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/run.py +0 -0
  134. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/secret.py +0 -0
  135. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/selector.py +0 -0
  136. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/server.py +0 -0
  137. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/shell.py +0 -0
  138. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/skills.py +0 -0
  139. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/token.py +0 -0
  140. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/utils.py +0 -0
  141. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/volume.py +0 -0
  142. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/workspace.py +0 -0
  143. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/client.py +0 -0
  144. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cloud_bucket_mount.py +0 -0
  145. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cloud_bucket_mount.pyi +0 -0
  146. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cls.py +0 -0
  147. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cls.pyi +0 -0
  148. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cluster.py +0 -0
  149. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cluster.pyi +0 -0
  150. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/config.py +0 -0
  151. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/container_process.py +0 -0
  152. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/container_process.pyi +0 -0
  153. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/dict.py +0 -0
  154. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/dict.pyi +0 -0
  155. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/environments.py +0 -0
  156. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/environments.pyi +0 -0
  157. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/exception.py +0 -0
  158. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/__init__.py +0 -0
  159. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/_flash_container_entry.py +0 -0
  160. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash.py +0 -0
  161. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash.pyi +0 -0
  162. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash_server.py +0 -0
  163. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash_server.pyi +0 -0
  164. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/ipython.py +0 -0
  165. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/file_pattern_matcher.py +0 -0
  166. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/functions.py +0 -0
  167. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/image.py +0 -0
  168. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/image.pyi +0 -0
  169. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/io_streams.py +0 -0
  170. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/io_streams.pyi +0 -0
  171. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/mount.py +0 -0
  172. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/mount.pyi +0 -0
  173. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/network_file_system.py +0 -0
  174. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/network_file_system.pyi +0 -0
  175. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/object.py +0 -0
  176. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/object.pyi +0 -0
  177. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/output.py +0 -0
  178. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/parallel_map.py +0 -0
  179. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/parallel_map.pyi +0 -0
  180. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/partial_function.py +0 -0
  181. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/partial_function.pyi +0 -0
  182. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/proxy.py +0 -0
  183. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/proxy.pyi +0 -0
  184. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/py.typed +0 -0
  185. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/queue.py +0 -0
  186. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/queue.pyi +0 -0
  187. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/retries.py +0 -0
  188. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/runner.py +0 -0
  189. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/runner.pyi +0 -0
  190. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/running_app.py +0 -0
  191. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/__init__.py +0 -0
  192. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_common.py +0 -0
  193. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_filesystem.py +0 -0
  194. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_impl_persistent.py +0 -0
  195. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_impl_v1.py +0 -0
  196. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_impl_v2.py +0 -0
  197. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_sandbox.py +0 -0
  198. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_sidecar.py +0 -0
  199. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_snapshot.py +0 -0
  200. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_task_command_router_client.py +0 -0
  201. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/sandbox.py +0 -0
  202. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/sandbox.pyi +0 -0
  203. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/schedule.py +0 -0
  204. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/scheduler_placement.py +0 -0
  205. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/secret.py +0 -0
  206. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/secret.pyi +0 -0
  207. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/server.py +0 -0
  208. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/server.pyi +0 -0
  209. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/serving.py +0 -0
  210. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/serving.pyi +0 -0
  211. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/skills/modal/SKILL.md +0 -0
  212. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/stream_type.py +0 -0
  213. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/token_flow.py +0 -0
  214. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/token_flow.pyi +0 -0
  215. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/types.py +0 -0
  216. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/volume.py +0 -0
  217. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/volume.pyi +0 -0
  218. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/workspace.py +0 -0
  219. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/workspace.pyi +0 -0
  220. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/SOURCES.txt +0 -0
  221. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/dependency_links.txt +0 -0
  222. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/entry_points.txt +0 -0
  223. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/requires.txt +0 -0
  224. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/top_level.txt +0 -0
  225. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/__init__.py +0 -0
  226. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_cli_docs.py +0 -0
  227. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_cli_docs_main.py +0 -0
  228. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_reference_docs.py +0 -0
  229. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_reference_docs_main.py +0 -0
  230. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/__init__.py +0 -0
  231. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/mdmd.py +0 -0
  232. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/signatures.py +0 -0
  233. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/types.py +0 -0
  234. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/reference_intro.md +0 -0
  235. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/__init__.py +0 -0
  236. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_grpc.py +0 -0
  237. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2_grpc.py +0 -0
  238. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2_grpc.pyi +0 -0
  239. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/modal_api_grpc.py +0 -0
  240. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/py.typed +0 -0
  241. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_grpc.py +0 -0
  242. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2.py +0 -0
  243. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2.pyi +0 -0
  244. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  245. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  246. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_version/__main__.py +0 -0
  247. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/pyproject.toml +0 -0
  248. {modal-1.6.3.dev7 → modal-1.6.3.dev8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.3.dev7
3
+ Version: 1.6.3.dev8
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -349,6 +349,13 @@ def _get_image_builder_version(server_version: ImageBuilderVersion) -> ImageBuil
349
349
  return version
350
350
 
351
351
 
352
+ async def _resolve_image_builder_version(load_context: LoadContext) -> ImageBuilderVersion:
353
+ environment = await _get_environment_cached(load_context.environment_name or "", load_context.client)
354
+ # A bit hacky,but assume that the environment provides a valid builder version
355
+ image_builder_version = cast(ImageBuilderVersion, environment._settings.image_builder_version)
356
+ return _get_image_builder_version(image_builder_version)
357
+
358
+
352
359
  def _create_context_mount(
353
360
  docker_commands: Sequence[str],
354
361
  ignore_fn: Callable[[Path], bool],
@@ -663,10 +670,7 @@ class _Image(_Object, type_prefix="im"):
663
670
 
664
671
  async def _load(self: _Image, resolver: Resolver, load_context: LoadContext, existing_object_id: str | None):
665
672
  assert load_context.app_id # type narrowing
666
- environment = await _get_environment_cached(load_context.environment_name or "", load_context.client)
667
- # A bit hacky,but assume that the environment provides a valid builder version
668
- image_builder_version = cast(ImageBuilderVersion, environment._settings.image_builder_version)
669
- builder_version = _get_image_builder_version(image_builder_version)
673
+ builder_version = await _resolve_image_builder_version(load_context)
670
674
 
671
675
  context_mount = context_mount_function(builder_version) if context_mount_function else None
672
676
  if context_mount:
@@ -2289,12 +2293,48 @@ class _Image(_Object, type_prefix="im"):
2289
2293
  context_files = {CONTAINER_REQUIREMENTS_PATH: _get_modal_requirements_path(version, add_python)}
2290
2294
  return DockerfileSpec(commands=commands, context_files=context_files)
2291
2295
 
2292
- return _Image._from_args(
2296
+ single_layer_image = _Image._from_args(
2293
2297
  dockerfile_function=build_dockerfile,
2294
2298
  context_mount_function=context_mount_function,
2295
2299
  force_build=force_build,
2296
2300
  **kwargs,
2297
2301
  )
2302
+ if not add_python:
2303
+ return single_layer_image
2304
+
2305
+ # Builder versions after 2025.06 put the registry image and the standalone Python in separate layers.
2306
+ registry_image = _Image._from_args(
2307
+ dockerfile_function=lambda version: DockerfileSpec(commands=[f"FROM {tag}"], context_files={}),
2308
+ image_registry_config=kwargs.get("image_registry_config"),
2309
+ force_build=force_build,
2310
+ )
2311
+
2312
+ def build_python_dockerfile(version: ImageBuilderVersion) -> DockerfileSpec:
2313
+ commands = _Image._registry_setup_commands("base", version, setup_dockerfile_commands, add_python)
2314
+ return DockerfileSpec(commands=commands, context_files={})
2315
+
2316
+ split_image = _Image._from_args(
2317
+ base_images={"base": registry_image},
2318
+ dockerfile_function=build_python_dockerfile,
2319
+ context_mount_function=context_mount_function,
2320
+ force_build=force_build,
2321
+ **kwargs,
2322
+ )
2323
+
2324
+ async def _load(self: _Image, resolver: Resolver, load_context: LoadContext, existing_object_id: str | None):
2325
+ builder_version = await _resolve_image_builder_version(load_context)
2326
+ # Validate before the registry base image of split_image is built.
2327
+ _validate_python_version(
2328
+ add_python, builder_version, allow_micro_granularity=False, allow_free_threading=True
2329
+ )
2330
+ image = split_image if builder_version > "2025.06" else single_layer_image
2331
+ await resolver.load(image, load_context)
2332
+ self._hydrate_from_other(image)
2333
+ self._serve_mounts = image._serve_mounts
2334
+
2335
+ obj = _Image._from_loader(_load, f"Image.from_registry({tag!r})", load_context_overrides=LoadContext.empty())
2336
+ obj.force_build = force_build
2337
+ return obj
2298
2338
 
2299
2339
  @staticmethod
2300
2340
  def from_gcp_artifact_registry(
@@ -80,7 +80,7 @@ class _Client:
80
80
  server_url: str,
81
81
  client_type: int,
82
82
  credentials: typing.Optional[tuple[str, str]],
83
- version: str = "1.6.3.dev7",
83
+ version: str = "1.6.3.dev8",
84
84
  *,
85
85
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
86
86
  ):
@@ -290,7 +290,7 @@ class Client:
290
290
  server_url: str,
291
291
  client_type: int,
292
292
  credentials: typing.Optional[tuple[str, str]],
293
- version: str = "1.6.3.dev7",
293
+ version: str = "1.6.3.dev8",
294
294
  *,
295
295
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
296
296
  ):
@@ -619,7 +619,7 @@ class Function(
619
619
 
620
620
  _call_generator: ___call_generator_spec
621
621
 
622
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
622
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
623
623
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
624
624
  """Calls the function remotely, executing it with the given arguments and returning the execution's result.
625
625
 
@@ -644,7 +644,7 @@ class Function(
644
644
  """
645
645
  ...
646
646
 
647
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
647
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
648
648
 
649
649
  class __remote_gen_spec(typing_extensions.Protocol):
650
650
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -694,7 +694,7 @@ class Function(
694
694
  """
695
695
  ...
696
696
 
697
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
697
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
698
698
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
699
699
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
700
700
 
@@ -727,7 +727,7 @@ class Function(
727
727
  """
728
728
  ...
729
729
 
730
- _experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
730
+ _experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
731
731
 
732
732
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
733
733
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
@@ -735,7 +735,7 @@ class Function(
735
735
 
736
736
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
737
737
 
738
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
738
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
739
739
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
740
740
  """Calls the function with the given arguments, without waiting for the results.
741
741
 
@@ -768,7 +768,7 @@ class Function(
768
768
  """
769
769
  ...
770
770
 
771
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
771
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
772
772
 
773
773
  @property
774
774
  def _raw_f_(self) -> collections.abc.Callable[..., typing.Any]: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.3.dev7
3
+ Version: 1.6.3.dev8
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0