modal 1.1.2.dev16__tar.gz → 1.1.2.dev18__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.dev16 → modal-1.1.2.dev18}/PKG-INFO +1 -1
  2. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/client.pyi +2 -2
  3. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/experimental/__init__.py +28 -2
  4. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal.egg-info/PKG-INFO +1 -1
  5. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/api.proto +1 -0
  6. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/api_pb2.py +536 -536
  7. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/api_pb2.pyi +7 -2
  8. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_version/__init__.py +1 -1
  9. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/LICENSE +0 -0
  10. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/README.md +0 -0
  11. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/__init__.py +0 -0
  12. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/__main__.py +0 -0
  13. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_clustered_functions.py +0 -0
  14. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_clustered_functions.pyi +0 -0
  15. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_container_entrypoint.py +0 -0
  16. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_functions.py +0 -0
  17. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_ipython.py +0 -0
  18. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_location.py +0 -0
  19. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_object.py +0 -0
  20. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_output.py +0 -0
  21. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_partial_function.py +0 -0
  22. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_pty.py +0 -0
  23. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_resolver.py +0 -0
  24. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_resources.py +0 -0
  25. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/__init__.py +0 -0
  26. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/asgi.py +0 -0
  27. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/container_io_manager.py +0 -0
  28. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/container_io_manager.pyi +0 -0
  29. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/execution_context.py +0 -0
  30. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/execution_context.pyi +0 -0
  31. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  32. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/telemetry.py +0 -0
  33. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_runtime/user_code_imports.py +0 -0
  34. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_serialization.py +0 -0
  35. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_traceback.py +0 -0
  36. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_tunnel.py +0 -0
  37. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_tunnel.pyi +0 -0
  38. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_type_manager.py +0 -0
  39. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/__init__.py +0 -0
  40. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/app_utils.py +0 -0
  41. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/async_utils.py +0 -0
  42. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/auth_token_manager.py +0 -0
  43. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/blob_utils.py +0 -0
  44. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/bytes_io_segment_payload.py +0 -0
  45. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/deprecation.py +0 -0
  46. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/docker_utils.py +0 -0
  47. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/function_utils.py +0 -0
  48. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/git_utils.py +0 -0
  49. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/grpc_testing.py +0 -0
  50. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/grpc_utils.py +0 -0
  51. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/hash_utils.py +0 -0
  52. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/http_utils.py +0 -0
  53. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/jwt_utils.py +0 -0
  54. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/logger.py +0 -0
  55. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/mount_utils.py +0 -0
  56. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/name_utils.py +0 -0
  57. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/package_utils.py +0 -0
  58. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/pattern_utils.py +0 -0
  59. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/rand_pb_testing.py +0 -0
  60. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/shell_utils.py +0 -0
  61. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_utils/time_utils.py +0 -0
  62. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_vendor/__init__.py +0 -0
  63. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  64. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_vendor/cloudpickle.py +0 -0
  65. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_vendor/tblib.py +0 -0
  66. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/_watcher.py +0 -0
  67. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/app.py +0 -0
  68. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/app.pyi +0 -0
  69. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/2023.12.312.txt +0 -0
  70. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/2023.12.txt +0 -0
  71. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/2024.04.txt +0 -0
  72. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/2024.10.txt +0 -0
  73. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/2025.06.txt +0 -0
  74. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/PREVIEW.txt +0 -0
  75. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/README.md +0 -0
  76. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/builder/base-images.json +0 -0
  77. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/call_graph.py +0 -0
  78. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/__init__.py +0 -0
  79. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/_download.py +0 -0
  80. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/_traceback.py +0 -0
  81. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/app.py +0 -0
  82. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/cluster.py +0 -0
  83. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/config.py +0 -0
  84. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/container.py +0 -0
  85. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/dict.py +0 -0
  86. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/entry_point.py +0 -0
  87. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/environment.py +0 -0
  88. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/import_refs.py +0 -0
  89. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/launch.py +0 -0
  90. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/network_file_system.py +0 -0
  91. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/profile.py +0 -0
  92. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/programs/__init__.py +0 -0
  93. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/programs/launch_instance_ssh.py +0 -0
  94. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/programs/run_jupyter.py +0 -0
  95. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/programs/run_marimo.py +0 -0
  96. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/programs/vscode.py +0 -0
  97. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/queues.py +0 -0
  98. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/run.py +0 -0
  99. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/secret.py +0 -0
  100. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/token.py +0 -0
  101. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/utils.py +0 -0
  102. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cli/volume.py +0 -0
  103. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/client.py +0 -0
  104. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cloud_bucket_mount.py +0 -0
  105. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cloud_bucket_mount.pyi +0 -0
  106. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cls.py +0 -0
  107. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/cls.pyi +0 -0
  108. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/config.py +0 -0
  109. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/container_process.py +0 -0
  110. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/container_process.pyi +0 -0
  111. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/dict.py +0 -0
  112. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/dict.pyi +0 -0
  113. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/environments.py +0 -0
  114. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/environments.pyi +0 -0
  115. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/exception.py +0 -0
  116. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/experimental/flash.py +0 -0
  117. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/experimental/flash.pyi +0 -0
  118. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/experimental/ipython.py +0 -0
  119. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/file_io.py +0 -0
  120. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/file_io.pyi +0 -0
  121. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/file_pattern_matcher.py +0 -0
  122. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/functions.py +0 -0
  123. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/functions.pyi +0 -0
  124. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/gpu.py +0 -0
  125. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/image.py +0 -0
  126. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/image.pyi +0 -0
  127. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/io_streams.py +0 -0
  128. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/io_streams.pyi +0 -0
  129. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/mount.py +0 -0
  130. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/mount.pyi +0 -0
  131. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/network_file_system.py +0 -0
  132. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/network_file_system.pyi +0 -0
  133. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/object.py +0 -0
  134. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/object.pyi +0 -0
  135. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/output.py +0 -0
  136. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/parallel_map.py +0 -0
  137. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/parallel_map.pyi +0 -0
  138. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/partial_function.py +0 -0
  139. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/partial_function.pyi +0 -0
  140. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/proxy.py +0 -0
  141. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/proxy.pyi +0 -0
  142. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/py.typed +0 -0
  143. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/queue.py +0 -0
  144. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/queue.pyi +0 -0
  145. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/retries.py +0 -0
  146. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/runner.py +0 -0
  147. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/runner.pyi +0 -0
  148. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/running_app.py +0 -0
  149. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/sandbox.py +0 -0
  150. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/sandbox.pyi +0 -0
  151. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/schedule.py +0 -0
  152. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/scheduler_placement.py +0 -0
  153. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/secret.py +0 -0
  154. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/secret.pyi +0 -0
  155. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/serving.py +0 -0
  156. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/serving.pyi +0 -0
  157. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/snapshot.py +0 -0
  158. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/snapshot.pyi +0 -0
  159. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/stream_type.py +0 -0
  160. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/token_flow.py +0 -0
  161. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/token_flow.pyi +0 -0
  162. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/volume.py +0 -0
  163. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal/volume.pyi +0 -0
  164. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal.egg-info/SOURCES.txt +0 -0
  165. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal.egg-info/dependency_links.txt +0 -0
  166. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal.egg-info/entry_points.txt +0 -0
  167. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal.egg-info/requires.txt +0 -0
  168. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal.egg-info/top_level.txt +0 -0
  169. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_docs/__init__.py +0 -0
  170. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_docs/gen_cli_docs.py +0 -0
  171. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_docs/gen_reference_docs.py +0 -0
  172. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_docs/mdmd/__init__.py +0 -0
  173. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_docs/mdmd/mdmd.py +0 -0
  174. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_docs/mdmd/signatures.py +0 -0
  175. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/__init__.py +0 -0
  176. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/api_grpc.py +0 -0
  177. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/api_pb2_grpc.py +0 -0
  178. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/api_pb2_grpc.pyi +0 -0
  179. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/modal_api_grpc.py +0 -0
  180. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/options.proto +0 -0
  182. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_proto/py.typed +0 -0
  188. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/modal_version/__main__.py +0 -0
  189. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/pyproject.toml +0 -0
  190. {modal-1.1.2.dev16 → modal-1.1.2.dev18}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.2.dev16
3
+ Version: 1.1.2.dev18
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -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.dev16",
36
+ version: str = "1.1.2.dev18",
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.dev16",
167
+ version: str = "1.1.2.dev18",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -213,6 +213,24 @@ async def raw_registry_image(
213
213
  )
214
214
 
215
215
 
216
+ def _install_cuda_command() -> str:
217
+ """Command to install CUDA Toolkit (nvcc) inside a container."""
218
+ arch = "x86_64" # instruction set architecture for the CPU, all Modal machines are x86_64
219
+ distro = "debian12" # the distribution and version number of our OS (GNU/Linux)
220
+ filename = "cuda-keyring_1.1-1_all.deb" # NVIDIA signing key file
221
+ cuda_keyring_url = f"https://developer.download.nvidia.com/compute/cuda/repos/{distro}/{arch}/{filename}"
222
+
223
+ major, minor = 12, 8
224
+ max_cuda_version = f"{major}-{minor}"
225
+
226
+ return (
227
+ f"wget {cuda_keyring_url} && "
228
+ + f"dpkg -i {filename} && "
229
+ + f"rm -f {filename} && "
230
+ + f"apt-get update && apt-get install -y cuda-nvcc-{max_cuda_version}"
231
+ )
232
+
233
+
216
234
  @synchronizer.create_blocking
217
235
  async def notebook_base_image(*, python_version: Optional[str] = None, force_build: bool = False) -> _Image:
218
236
  """Default image used for Modal notebook kernels, with common libraries.
@@ -293,7 +311,8 @@ async def notebook_base_image(*, python_version: Optional[str] = None, force_bui
293
311
 
294
312
  commands: list[str] = [
295
313
  "apt-get update",
296
- "apt-get install -y libpq-dev pkg-config cmake git curl wget unzip zip libsqlite3-dev openssh-server",
314
+ "apt-get install -y libpq-dev pkg-config cmake git curl wget unzip zip libsqlite3-dev openssh-server vim",
315
+ _install_cuda_command(),
297
316
  # Install uv since it's faster than pip for installing packages.
298
317
  "pip install uv",
299
318
  # https://github.com/astral-sh/uv/issues/11480
@@ -306,7 +325,14 @@ async def notebook_base_image(*, python_version: Optional[str] = None, force_bui
306
325
  # https://github.com/charlesfrye/cuda-modal/blob/7fef8db12402986cf42d9c8cca8c63d1da6d7700/cuda/use_cuda.py#L158-L188
307
326
 
308
327
  def build_dockerfile(version: ImageBuilderVersion) -> DockerfileSpec:
309
- return DockerfileSpec(commands=["FROM base", *(f"RUN {cmd}" for cmd in commands)], context_files={})
328
+ return DockerfileSpec(
329
+ commands=[
330
+ "FROM base",
331
+ *(f"RUN {cmd}" for cmd in commands),
332
+ "ENV PATH=/usr/local/cuda/bin:$PATH",
333
+ ],
334
+ context_files={},
335
+ )
310
336
 
311
337
  return _Image._from_args(
312
338
  base_images={"base": base_image},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.2.dev16
3
+ Version: 1.1.2.dev18
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1824,6 +1824,7 @@ message FunctionOptions {
1824
1824
  optional uint32 batch_max_size = 15;
1825
1825
  optional uint64 batch_linger_ms = 16;
1826
1826
  optional SchedulerPlacement scheduler_placement = 17;
1827
+ optional string cloud_provider_str = 18;
1827
1828
  }
1828
1829
 
1829
1830
  message FunctionPrecreateRequest {