modal 1.1.2.dev21__tar.gz → 1.1.2.dev23__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 (190) hide show
  1. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/PKG-INFO +1 -1
  2. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_functions.py +2 -0
  3. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/client.pyi +2 -2
  4. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cls.py +10 -1
  5. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cls.pyi +9 -1
  6. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/functions.pyi +6 -6
  7. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal.egg-info/PKG-INFO +1 -1
  8. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/api.proto +1 -0
  9. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/api_pb2.py +558 -558
  10. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/api_pb2.pyi +9 -2
  11. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_version/__init__.py +1 -1
  12. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/LICENSE +0 -0
  13. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/README.md +0 -0
  14. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/__init__.py +0 -0
  15. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/__main__.py +0 -0
  16. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_clustered_functions.py +0 -0
  17. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_clustered_functions.pyi +0 -0
  18. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_container_entrypoint.py +0 -0
  19. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_ipython.py +0 -0
  20. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_location.py +0 -0
  21. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_object.py +0 -0
  22. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_output.py +0 -0
  23. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_partial_function.py +0 -0
  24. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_pty.py +0 -0
  25. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_resolver.py +0 -0
  26. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_resources.py +0 -0
  27. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/__init__.py +0 -0
  28. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/asgi.py +0 -0
  29. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/container_io_manager.py +0 -0
  30. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/container_io_manager.pyi +0 -0
  31. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/execution_context.py +0 -0
  32. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/execution_context.pyi +0 -0
  33. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  34. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/telemetry.py +0 -0
  35. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_runtime/user_code_imports.py +0 -0
  36. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_serialization.py +0 -0
  37. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_traceback.py +0 -0
  38. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_tunnel.py +0 -0
  39. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_tunnel.pyi +0 -0
  40. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_type_manager.py +0 -0
  41. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/__init__.py +0 -0
  42. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/app_utils.py +0 -0
  43. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/async_utils.py +0 -0
  44. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/auth_token_manager.py +0 -0
  45. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/blob_utils.py +0 -0
  46. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/bytes_io_segment_payload.py +0 -0
  47. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/deprecation.py +0 -0
  48. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/docker_utils.py +0 -0
  49. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/function_utils.py +0 -0
  50. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/git_utils.py +0 -0
  51. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/grpc_testing.py +0 -0
  52. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/grpc_utils.py +0 -0
  53. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/hash_utils.py +0 -0
  54. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/http_utils.py +0 -0
  55. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/jwt_utils.py +0 -0
  56. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/logger.py +0 -0
  57. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/mount_utils.py +0 -0
  58. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/name_utils.py +0 -0
  59. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/package_utils.py +0 -0
  60. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/pattern_utils.py +0 -0
  61. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/rand_pb_testing.py +0 -0
  62. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/shell_utils.py +0 -0
  63. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_utils/time_utils.py +0 -0
  64. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_vendor/__init__.py +0 -0
  65. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  66. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_vendor/cloudpickle.py +0 -0
  67. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_vendor/tblib.py +0 -0
  68. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/_watcher.py +0 -0
  69. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/app.py +0 -0
  70. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/app.pyi +0 -0
  71. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/2023.12.312.txt +0 -0
  72. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/2023.12.txt +0 -0
  73. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/2024.04.txt +0 -0
  74. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/2024.10.txt +0 -0
  75. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/2025.06.txt +0 -0
  76. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/PREVIEW.txt +0 -0
  77. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/README.md +0 -0
  78. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/builder/base-images.json +0 -0
  79. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/call_graph.py +0 -0
  80. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/__init__.py +0 -0
  81. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/_download.py +0 -0
  82. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/_traceback.py +0 -0
  83. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/app.py +0 -0
  84. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/cluster.py +0 -0
  85. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/config.py +0 -0
  86. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/container.py +0 -0
  87. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/dict.py +0 -0
  88. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/entry_point.py +0 -0
  89. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/environment.py +0 -0
  90. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/import_refs.py +0 -0
  91. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/launch.py +0 -0
  92. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/network_file_system.py +0 -0
  93. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/profile.py +0 -0
  94. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/programs/__init__.py +0 -0
  95. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/programs/launch_instance_ssh.py +0 -0
  96. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/programs/run_jupyter.py +0 -0
  97. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/programs/run_marimo.py +0 -0
  98. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/programs/vscode.py +0 -0
  99. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/queues.py +0 -0
  100. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/run.py +0 -0
  101. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/secret.py +0 -0
  102. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/token.py +0 -0
  103. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/utils.py +0 -0
  104. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cli/volume.py +0 -0
  105. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/client.py +0 -0
  106. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cloud_bucket_mount.py +0 -0
  107. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/cloud_bucket_mount.pyi +0 -0
  108. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/config.py +0 -0
  109. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/container_process.py +0 -0
  110. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/container_process.pyi +0 -0
  111. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/dict.py +0 -0
  112. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/dict.pyi +0 -0
  113. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/environments.py +0 -0
  114. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/environments.pyi +0 -0
  115. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/exception.py +0 -0
  116. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/experimental/__init__.py +0 -0
  117. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/experimental/flash.py +0 -0
  118. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/experimental/flash.pyi +0 -0
  119. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/experimental/ipython.py +0 -0
  120. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/file_io.py +0 -0
  121. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/file_io.pyi +0 -0
  122. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/file_pattern_matcher.py +0 -0
  123. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/functions.py +0 -0
  124. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/gpu.py +0 -0
  125. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/image.py +0 -0
  126. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/image.pyi +0 -0
  127. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/io_streams.py +0 -0
  128. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/io_streams.pyi +0 -0
  129. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/mount.py +0 -0
  130. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/mount.pyi +0 -0
  131. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/network_file_system.py +0 -0
  132. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/network_file_system.pyi +0 -0
  133. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/object.py +0 -0
  134. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/object.pyi +0 -0
  135. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/output.py +0 -0
  136. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/parallel_map.py +0 -0
  137. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/parallel_map.pyi +0 -0
  138. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/partial_function.py +0 -0
  139. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/partial_function.pyi +0 -0
  140. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/proxy.py +0 -0
  141. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/proxy.pyi +0 -0
  142. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/py.typed +0 -0
  143. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/queue.py +0 -0
  144. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/queue.pyi +0 -0
  145. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/retries.py +0 -0
  146. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/runner.py +0 -0
  147. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/runner.pyi +0 -0
  148. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/running_app.py +0 -0
  149. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/sandbox.py +0 -0
  150. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/sandbox.pyi +0 -0
  151. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/schedule.py +0 -0
  152. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/scheduler_placement.py +0 -0
  153. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/secret.py +0 -0
  154. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/secret.pyi +0 -0
  155. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/serving.py +0 -0
  156. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/serving.pyi +0 -0
  157. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/snapshot.py +0 -0
  158. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/snapshot.pyi +0 -0
  159. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/stream_type.py +0 -0
  160. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/token_flow.py +0 -0
  161. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/token_flow.pyi +0 -0
  162. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/volume.py +0 -0
  163. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal/volume.pyi +0 -0
  164. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal.egg-info/SOURCES.txt +0 -0
  165. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal.egg-info/dependency_links.txt +0 -0
  166. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal.egg-info/entry_points.txt +0 -0
  167. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal.egg-info/requires.txt +0 -0
  168. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal.egg-info/top_level.txt +0 -0
  169. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_docs/__init__.py +0 -0
  170. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_docs/gen_cli_docs.py +0 -0
  171. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_docs/gen_reference_docs.py +0 -0
  172. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_docs/mdmd/__init__.py +0 -0
  173. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_docs/mdmd/mdmd.py +0 -0
  174. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_docs/mdmd/signatures.py +0 -0
  175. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/__init__.py +0 -0
  176. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/api_grpc.py +0 -0
  177. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/api_pb2_grpc.py +0 -0
  178. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/api_pb2_grpc.pyi +0 -0
  179. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/modal_api_grpc.py +0 -0
  180. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/options.proto +0 -0
  182. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_proto/py.typed +0 -0
  188. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/modal_version/__main__.py +0 -0
  189. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/pyproject.toml +0 -0
  190. {modal-1.1.2.dev21 → modal-1.1.2.dev23}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.2.dev21
3
+ Version: 1.1.2.dev23
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1132,6 +1132,8 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1132
1132
  target_concurrent_inputs=options.target_concurrent_inputs,
1133
1133
  batch_max_size=options.batch_max_size,
1134
1134
  batch_linger_ms=options.batch_wait_ms,
1135
+ scheduler_placement=options.scheduler_placement,
1136
+ cloud_provider_str=options.cloud,
1135
1137
  )
1136
1138
  else:
1137
1139
  options_pb = None
@@ -33,7 +33,7 @@ class _Client:
33
33
  server_url: str,
34
34
  client_type: int,
35
35
  credentials: typing.Optional[tuple[str, str]],
36
- version: str = "1.1.2.dev21",
36
+ version: str = "1.1.2.dev23",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -164,7 +164,7 @@ class Client:
164
164
  server_url: str,
165
165
  client_type: int,
166
166
  credentials: typing.Optional[tuple[str, str]],
167
- version: str = "1.1.2.dev21",
167
+ version: str = "1.1.2.dev23",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -4,7 +4,7 @@ import inspect
4
4
  import os
5
5
  import typing
6
6
  from collections.abc import Collection
7
- from typing import Any, Callable, Optional, TypeVar, Union
7
+ from typing import Any, Callable, Optional, Sequence, TypeVar, Union
8
8
 
9
9
  from google.protobuf.message import Message
10
10
  from grpclib import GRPCError, Status
@@ -37,6 +37,7 @@ from .config import config
37
37
  from .exception import ExecutionError, InvalidError, NotFoundError
38
38
  from .gpu import GPU_T
39
39
  from .retries import Retries
40
+ from .scheduler_placement import SchedulerPlacement
40
41
  from .secret import _Secret
41
42
  from .volume import _Volume
42
43
 
@@ -92,6 +93,8 @@ class _ServiceOptions:
92
93
  target_concurrent_inputs: Optional[int] = None
93
94
  batch_max_size: Optional[int] = None
94
95
  batch_wait_ms: Optional[int] = None
96
+ scheduler_placement: Optional[api_pb2.SchedulerPlacement] = None
97
+ cloud: Optional[str] = None
95
98
 
96
99
  def merge_options(self, new_options: "_ServiceOptions") -> "_ServiceOptions":
97
100
  """Implement protobuf-like MergeFrom semantics for this dataclass.
@@ -685,6 +688,8 @@ More information on class parameterization can be found here: https://modal.com/
685
688
  buffer_containers: Optional[int] = None, # Additional containers to scale up while Function is active.
686
689
  scaledown_window: Optional[int] = None, # Max amount of time a container can remain idle before scaling down.
687
690
  timeout: Optional[int] = None,
691
+ region: Optional[Union[str, Sequence[str]]] = None, # Region or regions to run the function on.
692
+ cloud: Optional[str] = None, # Cloud provider to run the function on. Possible values are aws, gcp, oci, auto.
688
693
  # The following parameters are deprecated
689
694
  concurrency_limit: Optional[int] = None, # Now called `max_containers`
690
695
  container_idle_timeout: Optional[int] = None, # Now called `scaledown_window`
@@ -723,6 +728,8 @@ More information on class parameterization can be found here: https://modal.com/
723
728
  else:
724
729
  resources = None
725
730
 
731
+ scheduler_placement = SchedulerPlacement(region=region).proto if region else None
732
+
726
733
  if allow_concurrent_inputs is not None:
727
734
  deprecation_warning(
728
735
  (2025, 5, 9),
@@ -758,6 +765,8 @@ More information on class parameterization can be found here: https://modal.com/
758
765
  buffer_containers=buffer_containers,
759
766
  scaledown_window=scaledown_window,
760
767
  timeout_secs=timeout,
768
+ scheduler_placement=scheduler_placement,
769
+ cloud=cloud,
761
770
  # Note: set both for backwards / forwards compatibility
762
771
  # But going forward `.with_concurrency` is the preferred method with distinct parameterization
763
772
  max_concurrent_inputs=allow_concurrent_inputs,
@@ -24,7 +24,7 @@ def _use_annotation_parameters(user_cls: type) -> bool: ...
24
24
  def _get_class_constructor_signature(user_cls: type) -> inspect.Signature: ...
25
25
 
26
26
  class _ServiceOptions:
27
- """_ServiceOptions(secrets: Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None)"""
27
+ """_ServiceOptions(secrets: Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None, scheduler_placement: Optional[modal_proto.api_pb2.SchedulerPlacement] = None, cloud: Optional[str] = None)"""
28
28
 
29
29
  secrets: typing.Collection[modal.secret._Secret]
30
30
  validated_volumes: typing.Sequence[tuple[str, modal.volume._Volume]]
@@ -38,6 +38,8 @@ class _ServiceOptions:
38
38
  target_concurrent_inputs: typing.Optional[int]
39
39
  batch_max_size: typing.Optional[int]
40
40
  batch_wait_ms: typing.Optional[int]
41
+ scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement]
42
+ cloud: typing.Optional[str]
41
43
 
42
44
  def merge_options(self, new_options: _ServiceOptions) -> _ServiceOptions:
43
45
  """Implement protobuf-like MergeFrom semantics for this dataclass.
@@ -60,6 +62,8 @@ class _ServiceOptions:
60
62
  target_concurrent_inputs: typing.Optional[int] = None,
61
63
  batch_max_size: typing.Optional[int] = None,
62
64
  batch_wait_ms: typing.Optional[int] = None,
65
+ scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement] = None,
66
+ cloud: typing.Optional[str] = None,
63
67
  ) -> None:
64
68
  """Initialize self. See help(type(self)) for accurate signature."""
65
69
  ...
@@ -395,6 +399,8 @@ class _Cls(modal._object._Object):
395
399
  buffer_containers: typing.Optional[int] = None,
396
400
  scaledown_window: typing.Optional[int] = None,
397
401
  timeout: typing.Optional[int] = None,
402
+ region: typing.Union[str, typing.Sequence[str], None] = None,
403
+ cloud: typing.Optional[str] = None,
398
404
  concurrency_limit: typing.Optional[int] = None,
399
405
  container_idle_timeout: typing.Optional[int] = None,
400
406
  allow_concurrent_inputs: typing.Optional[int] = None,
@@ -559,6 +565,8 @@ class Cls(modal.object.Object):
559
565
  buffer_containers: typing.Optional[int] = None,
560
566
  scaledown_window: typing.Optional[int] = None,
561
567
  timeout: typing.Optional[int] = None,
568
+ region: typing.Union[str, typing.Sequence[str], None] = None,
569
+ cloud: typing.Optional[str] = None,
562
570
  concurrency_limit: typing.Optional[int] = None,
563
571
  container_idle_timeout: typing.Optional[int] = None,
564
572
  allow_concurrent_inputs: typing.Optional[int] = None,
@@ -433,7 +433,7 @@ class Function(
433
433
 
434
434
  _call_generator: ___call_generator_spec[typing_extensions.Self]
435
435
 
436
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
436
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
437
437
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
438
438
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
439
439
  ...
@@ -442,7 +442,7 @@ class Function(
442
442
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
443
443
  ...
444
444
 
445
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
445
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
446
446
 
447
447
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
448
448
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -469,7 +469,7 @@ class Function(
469
469
  """
470
470
  ...
471
471
 
472
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
472
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
473
473
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
474
474
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
475
475
 
@@ -493,7 +493,7 @@ class Function(
493
493
  ...
494
494
 
495
495
  _experimental_spawn: ___experimental_spawn_spec[
496
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
496
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
497
497
  ]
498
498
 
499
499
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -502,7 +502,7 @@ class Function(
502
502
 
503
503
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
504
504
 
505
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
505
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
506
506
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
507
507
  """Calls the function with the given arguments, without waiting for the results.
508
508
 
@@ -523,7 +523,7 @@ class Function(
523
523
  """
524
524
  ...
525
525
 
526
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
526
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
527
527
 
528
528
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
529
529
  """Return the inner Python object wrapped by this Modal Function."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.2.dev21
3
+ Version: 1.1.2.dev23
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1722,6 +1722,7 @@ message FunctionGetOutputsRequest {
1722
1722
  // The jwts the client expects the server to be processing. This is optional and used for sync inputs only.
1723
1723
  repeated string input_jwts = 9;
1724
1724
  optional int32 start_idx = 10; // for async batch requests. this indicates which index to start from.
1725
+ optional int32 end_idx = 11; // for async batch requests. this indicates which index to end at.
1725
1726
  }
1726
1727
 
1727
1728
  message FunctionGetOutputsResponse {