modal 1.5.5.dev12__tar.gz → 1.5.5.dev14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/PKG-INFO +1 -1
  2. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/client.pyi +2 -2
  3. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/experimental/flash.py +23 -4
  4. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/experimental/flash.pyi +12 -6
  5. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal.egg-info/PKG-INFO +1 -1
  6. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/task_command_router_pb2.py +20 -20
  7. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/task_command_router_pb2.pyi +5 -1
  8. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_version/__init__.py +1 -1
  9. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/LICENSE +0 -0
  10. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/README.md +0 -0
  11. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/__init__.py +0 -0
  12. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/__main__.py +0 -0
  13. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_billing.py +0 -0
  14. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_clustered_functions.py +0 -0
  15. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_clustered_functions.pyi +0 -0
  16. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_container_entrypoint.py +0 -0
  17. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_environments.py +0 -0
  18. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_function_variants.py +0 -0
  19. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_functions.py +0 -0
  20. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_grpc_client.py +0 -0
  21. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_image.py +0 -0
  22. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_ipython.py +0 -0
  23. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_load_context.py +0 -0
  24. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_location.py +0 -0
  25. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_logs.py +0 -0
  26. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_logs_manager.py +0 -0
  27. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_logs_manager.pyi +0 -0
  28. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_object.py +0 -0
  29. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_output/__init__.py +0 -0
  30. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_output/manager.py +0 -0
  31. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_output/pty.py +0 -0
  32. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_output/rich.py +0 -0
  33. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_output/status.py +0 -0
  34. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_partial_function.py +0 -0
  35. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_resolver.py +0 -0
  36. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_resources.py +0 -0
  37. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/__init__.py +0 -0
  38. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/asgi.py +0 -0
  39. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/container_io_manager.py +0 -0
  40. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/container_io_manager.pyi +0 -0
  41. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/execution_context.py +0 -0
  42. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/execution_context.pyi +0 -0
  43. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  44. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/task_lifecycle_manager.py +0 -0
  45. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  46. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/telemetry.py +0 -0
  47. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/user_code_event_loop.py +0 -0
  48. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_runtime/user_code_imports.py +0 -0
  49. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_serialization.py +0 -0
  50. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_server.py +0 -0
  51. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_supports_logs.py +0 -0
  52. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_traceback.py +0 -0
  53. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_tunnel.py +0 -0
  54. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_tunnel.pyi +0 -0
  55. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_type_manager.py +0 -0
  56. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/__init__.py +0 -0
  57. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/app_utils.py +0 -0
  58. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/async_utils.py +0 -0
  59. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/auth_token_manager.py +0 -0
  60. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/blob_utils.py +0 -0
  61. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/browser_utils.py +0 -0
  62. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/bytes_io_segment_payload.py +0 -0
  63. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/curl_utils.py +0 -0
  64. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/deprecation.py +0 -0
  65. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/display_utils.py +0 -0
  66. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/docker_utils.py +0 -0
  67. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/function_utils.py +0 -0
  68. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/git_utils.py +0 -0
  69. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/grpc_testing.py +0 -0
  70. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/grpc_utils.py +0 -0
  71. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/hash_utils.py +0 -0
  72. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/http_utils.py +0 -0
  73. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/jwt_utils.py +0 -0
  74. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/logger.py +0 -0
  75. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/mount_utils.py +0 -0
  76. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/name_utils.py +0 -0
  77. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/package_utils.py +0 -0
  78. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/pattern_utils.py +0 -0
  79. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/proxy_support.py +0 -0
  80. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/rand_pb_testing.py +0 -0
  81. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/sandbox_fs_utils.py +0 -0
  82. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/shell_utils.py +0 -0
  83. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/task_command_router_client.py +0 -0
  84. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_utils/time_utils.py +0 -0
  85. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_vendor/__init__.py +0 -0
  86. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  87. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_vendor/cloudpickle.py +0 -0
  88. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_vendor/tblib.py +0 -0
  89. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_vendor/version.py +0 -0
  90. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_watcher.py +0 -0
  91. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/_workspace.py +0 -0
  92. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/app.py +0 -0
  93. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/app.pyi +0 -0
  94. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/billing.py +0 -0
  95. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/billing.pyi +0 -0
  96. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/2023.12.312.txt +0 -0
  97. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/2023.12.txt +0 -0
  98. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/2024.04.txt +0 -0
  99. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/2024.10.txt +0 -0
  100. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/2025.06.txt +0 -0
  101. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/PREVIEW.txt +0 -0
  102. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/README.md +0 -0
  103. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/builder/base-images.json +0 -0
  104. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/call_graph.py +0 -0
  105. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/__init__.py +0 -0
  106. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/_download.py +0 -0
  107. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/_help.py +0 -0
  108. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/_traceback.py +0 -0
  109. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/app.py +0 -0
  110. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/billing.py +0 -0
  111. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/bootstrap.py +0 -0
  112. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/changelog.py +0 -0
  113. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/cluster.py +0 -0
  114. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/config.py +0 -0
  115. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/container.py +0 -0
  116. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/curl.py +0 -0
  117. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/dashboard.py +0 -0
  118. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/dict.py +0 -0
  119. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/endpoint.py +0 -0
  120. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/entry_point.py +0 -0
  121. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/environment.py +0 -0
  122. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/image.py +0 -0
  123. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/import_refs.py +0 -0
  124. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/launch.py +0 -0
  125. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/logo.py +0 -0
  126. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/network_file_system.py +0 -0
  127. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/profile.py +0 -0
  128. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/programs/__init__.py +0 -0
  129. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/programs/run_jupyter.py +0 -0
  130. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/programs/vscode.py +0 -0
  131. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/queues.py +0 -0
  132. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/run.py +0 -0
  133. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/secret.py +0 -0
  134. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/selector.py +0 -0
  135. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/shell.py +0 -0
  136. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/skills.py +0 -0
  137. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/token.py +0 -0
  138. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/utils.py +0 -0
  139. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/volume.py +0 -0
  140. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cli/workspace.py +0 -0
  141. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/client.py +0 -0
  142. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cloud_bucket_mount.py +0 -0
  143. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cloud_bucket_mount.pyi +0 -0
  144. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cls.py +0 -0
  145. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/cls.pyi +0 -0
  146. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/config.py +0 -0
  147. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/container_process.py +0 -0
  148. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/container_process.pyi +0 -0
  149. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/dict.py +0 -0
  150. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/dict.pyi +0 -0
  151. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/environments.py +0 -0
  152. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/environments.pyi +0 -0
  153. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/exception.py +0 -0
  154. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/experimental/__init__.py +0 -0
  155. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/experimental/ipython.py +0 -0
  156. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/file_io.py +0 -0
  157. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/file_io.pyi +0 -0
  158. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/file_pattern_matcher.py +0 -0
  159. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/functions.py +0 -0
  160. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/functions.pyi +0 -0
  161. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/image.py +0 -0
  162. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/image.pyi +0 -0
  163. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/io_streams.py +0 -0
  164. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/io_streams.pyi +0 -0
  165. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/mount.py +0 -0
  166. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/mount.pyi +0 -0
  167. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/network_file_system.py +0 -0
  168. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/network_file_system.pyi +0 -0
  169. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/object.py +0 -0
  170. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/object.pyi +0 -0
  171. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/output.py +0 -0
  172. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/parallel_map.py +0 -0
  173. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/parallel_map.pyi +0 -0
  174. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/partial_function.py +0 -0
  175. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/partial_function.pyi +0 -0
  176. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/proxy.py +0 -0
  177. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/proxy.pyi +0 -0
  178. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/py.typed +0 -0
  179. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/queue.py +0 -0
  180. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/queue.pyi +0 -0
  181. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/retries.py +0 -0
  182. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/runner.py +0 -0
  183. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/runner.pyi +0 -0
  184. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/running_app.py +0 -0
  185. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/sandbox.py +0 -0
  186. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/sandbox.pyi +0 -0
  187. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/sandbox_fs.py +0 -0
  188. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/sandbox_fs.pyi +0 -0
  189. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/schedule.py +0 -0
  190. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/scheduler_placement.py +0 -0
  191. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/secret.py +0 -0
  192. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/secret.pyi +0 -0
  193. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/server.py +0 -0
  194. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/server.pyi +0 -0
  195. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/serving.py +0 -0
  196. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/serving.pyi +0 -0
  197. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/skills/modal/SKILL.md +0 -0
  198. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/snapshot.py +0 -0
  199. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/snapshot.pyi +0 -0
  200. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/stream_type.py +0 -0
  201. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/token_flow.py +0 -0
  202. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/token_flow.pyi +0 -0
  203. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/types.py +0 -0
  204. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/volume.py +0 -0
  205. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/volume.pyi +0 -0
  206. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/workspace.py +0 -0
  207. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal/workspace.pyi +0 -0
  208. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal.egg-info/SOURCES.txt +0 -0
  209. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal.egg-info/dependency_links.txt +0 -0
  210. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal.egg-info/entry_points.txt +0 -0
  211. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal.egg-info/requires.txt +0 -0
  212. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal.egg-info/top_level.txt +0 -0
  213. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/__init__.py +0 -0
  214. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/gen_cli_docs.py +0 -0
  215. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/gen_cli_docs_main.py +0 -0
  216. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/gen_reference_docs.py +0 -0
  217. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/gen_reference_docs_main.py +0 -0
  218. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/mdmd/__init__.py +0 -0
  219. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/mdmd/mdmd.py +0 -0
  220. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/mdmd/signatures.py +0 -0
  221. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/mdmd/types.py +0 -0
  222. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_docs/reference_intro.md +0 -0
  223. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/__init__.py +0 -0
  224. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/api_grpc.py +0 -0
  225. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/api_pb2.py +0 -0
  226. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/api_pb2.pyi +0 -0
  227. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/api_pb2_grpc.py +0 -0
  228. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/api_pb2_grpc.pyi +0 -0
  229. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/modal_api_grpc.py +0 -0
  230. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/py.typed +0 -0
  231. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/task_command_router_grpc.py +0 -0
  232. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  233. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  234. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/modal_version/__main__.py +0 -0
  235. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/pyproject.toml +0 -0
  236. {modal-1.5.5.dev12 → modal-1.5.5.dev14}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.5.dev12
3
+ Version: 1.5.5.dev14
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -38,7 +38,7 @@ class _Client:
38
38
  server_url: str,
39
39
  client_type: int,
40
40
  credentials: typing.Optional[tuple[str, str]],
41
- version: str = "1.5.5.dev12",
41
+ version: str = "1.5.5.dev14",
42
42
  ):
43
43
  """mdmd:hidden
44
44
  The Modal client object is not intended to be instantiated directly by users.
@@ -209,7 +209,7 @@ class Client:
209
209
  server_url: str,
210
210
  client_type: int,
211
211
  credentials: typing.Optional[tuple[str, str]],
212
- version: str = "1.5.5.dev12",
212
+ version: str = "1.5.5.dev14",
213
213
  ):
214
214
  """mdmd:hidden
215
215
  The Modal client object is not intended to be instantiated directly by users.
@@ -25,6 +25,7 @@ from ..client import _Client
25
25
  from ..config import logger
26
26
  from ..exception import InvalidError
27
27
 
28
+ _FLASH_UPSTREAM_HEADER = "modal-flash-upstream"
28
29
  _MAX_FAILURES = 10
29
30
 
30
31
 
@@ -337,9 +338,14 @@ class _FlashPrometheusAutoscaler:
337
338
  )
338
339
 
339
340
  self.autoscaler_thread: asyncio.Task | None = None
341
+ self._flash_service_url: str | None = None
340
342
 
341
343
  async def start(self):
342
344
  await self.fn.hydrate(client=self.client)
345
+ flash_service_urls = await self.fn._experimental_get_flash_urls()
346
+ if not flash_service_urls:
347
+ raise InvalidError(f"Could not find a Flash service URL for {self.app_name}.{self.cls_name}")
348
+ self._flash_service_url = flash_service_urls[0]
343
349
  self.autoscaler_thread = asyncio.create_task(self._run_autoscaler_loop())
344
350
 
345
351
  async def _run_autoscaler_loop(self):
@@ -496,13 +502,20 @@ class _FlashPrometheusAutoscaler:
496
502
  return desired_replicas
497
503
 
498
504
  async def _get_scaling_info(self, containers) -> tuple[float, int]:
499
- """Get metrics using container exposed metrics endpoints."""
505
+ """Get metrics from each container through the Flash service."""
506
+ if self._flash_service_url is None:
507
+ raise RuntimeError("Flash Prometheus autoscaler has not been started")
508
+
500
509
  sum_metric = 0
501
510
  n_containers_with_metrics = 0
511
+ metrics_url = f"{self._flash_service_url.rstrip('/')}/{self.metrics_endpoint.lstrip('/')}"
502
512
 
503
513
  container_metrics_list = await asyncio.gather(
504
514
  *[
505
- self._get_metrics(f"https://{container.host}:{container.port}/{self.metrics_endpoint}")
515
+ self._get_metrics(
516
+ metrics_url,
517
+ headers={_FLASH_UPSTREAM_HEADER: f"{container.host}:{container.port}"},
518
+ )
506
519
  for container in containers
507
520
  ]
508
521
  )
@@ -519,14 +532,20 @@ class _FlashPrometheusAutoscaler:
519
532
 
520
533
  return sum_metric, n_containers_with_metrics
521
534
 
522
- async def _get_metrics(self, url: str) -> dict[str, list[Any]] | None: # technically any should be Sample
535
+ async def _get_metrics(
536
+ self, url: str, headers: dict[str, str] | None = None
537
+ ) -> dict[str, list[Any]] | None: # technically any should be Sample
523
538
  import aiohttp
524
539
  from prometheus_client.parser import text_string_to_metric_families
525
540
  from prometheus_client.samples import Sample
526
541
 
527
542
  # Fetch the metrics from the endpoint
528
543
  try:
529
- response = await self.http_client.get(url, timeout=aiohttp.ClientTimeout(total=3))
544
+ response = await self.http_client.get(
545
+ url,
546
+ headers=headers,
547
+ timeout=aiohttp.ClientTimeout(total=3),
548
+ )
530
549
  response.raise_for_status()
531
550
  except asyncio.TimeoutError:
532
551
  logger.warning(f"[Modal Flash] Timeout getting metrics from {url}")
@@ -196,10 +196,12 @@ class _FlashPrometheusAutoscaler:
196
196
  ...
197
197
 
198
198
  async def _get_scaling_info(self, containers) -> tuple[float, int]:
199
- """Get metrics using container exposed metrics endpoints."""
199
+ """Get metrics from each container through the Flash service."""
200
200
  ...
201
201
 
202
- async def _get_metrics(self, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
202
+ async def _get_metrics(
203
+ self, url: str, headers: typing.Optional[dict[str, str]] = None
204
+ ) -> typing.Optional[dict[str, list[typing.Any]]]: ...
203
205
  async def _get_all_containers(self): ...
204
206
  async def _set_target_slots(self, target_slots: int): ...
205
207
  def _make_scaling_decision(
@@ -287,18 +289,22 @@ class FlashPrometheusAutoscaler:
287
289
 
288
290
  class ___get_scaling_info_spec(typing_extensions.Protocol):
289
291
  def __call__(self, /, containers) -> tuple[float, int]:
290
- """Get metrics using container exposed metrics endpoints."""
292
+ """Get metrics from each container through the Flash service."""
291
293
  ...
292
294
 
293
295
  async def aio(self, /, containers) -> tuple[float, int]:
294
- """Get metrics using container exposed metrics endpoints."""
296
+ """Get metrics from each container through the Flash service."""
295
297
  ...
296
298
 
297
299
  _get_scaling_info: ___get_scaling_info_spec
298
300
 
299
301
  class ___get_metrics_spec(typing_extensions.Protocol):
300
- def __call__(self, /, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
301
- async def aio(self, /, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
302
+ def __call__(
303
+ self, /, url: str, headers: typing.Optional[dict[str, str]] = None
304
+ ) -> typing.Optional[dict[str, list[typing.Any]]]: ...
305
+ async def aio(
306
+ self, /, url: str, headers: typing.Optional[dict[str, str]] = None
307
+ ) -> typing.Optional[dict[str, list[typing.Any]]]: ...
302
308
 
303
309
  _get_metrics: ___get_metrics_spec
304
310
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.5.dev12
3
+ Version: 1.5.5.dev14
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -17,7 +17,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
17
17
  from modal_proto import api_pb2 as modal__proto_dot_api__pb2
18
18
 
19
19
 
20
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%modal_proto/task_command_router.proto\x12\x19modal.task_command_router\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15modal_proto/api.proto\"X\n\x1aSandboxStdinWriteV2Request\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x04 \x01(\x08\"\x1d\n\x1bSandboxStdinWriteV2Response\"\x8c\x01\n\x19SandboxStdioReadV2Request\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x04\x12N\n\x0f\x66ile_descriptor\x18\x03 \x01(\x0e\x32\x35.modal.task_command_router.SandboxStdioFileDescriptor\"C\n\x1aSandboxStdioReadV2Response\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x17\n\x0fstarting_offset\x18\x02 \x01(\x04\"C\n\x1fSandboxWaitUntilReadyTcrRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07timeout\x18\x02 \x01(\x02\"4\n SandboxWaitUntilReadyTcrResponse\x12\x10\n\x08ready_at\x18\x01 \x01(\x01\"\xbd\x03\n\x1aTaskContainerCreateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x10\n\x08image_id\x18\x03 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x05 \x03(\t\x12K\n\x03\x65nv\x18\x06 \x03(\x0b\x32>.modal.task_command_router.TaskContainerCreateRequest.EnvEntry\x12\x0f\n\x07workdir\x18\x07 \x01(\t\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12\x30\n\rvolume_mounts\x18\t \x03(\x0b\x32\x19.modal.client.VolumeMount\x12\x38\n\x0enetwork_access\x18\n \x01(\x0b\x32\x1b.modal.client.NetworkAccessH\x00\x88\x01\x01\x12,\n\x08pty_info\x18\x0b \x01(\x0b\x32\x15.modal.client.PTYInfoH\x01\x88\x01\x01\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x11\n\x0f_network_accessB\x0b\n\t_pty_info\"K\n\x1bTaskContainerCreateResponse\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\"^\n\x17TaskContainerGetRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x1a\n\x12include_terminated\x18\x03 \x01(\x08\"[\n\x18TaskContainerGetResponse\x12?\n\tcontainer\x18\x01 \x01(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"~\n\x11TaskContainerInfo\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12+\n\x06result\x18\x04 \x01(\x0b\x32\x1b.modal.client.GenericResult\"G\n\x18TaskContainerListRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x1a\n\x12include_terminated\x18\x02 \x01(\x08\"]\n\x19TaskContainerListResponse\x12@\n\ncontainers\x18\x01 \x03(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"F\n\x1dTaskContainerTerminateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\" \n\x1eTaskContainerTerminateResponse\"R\n\x18TaskContainerWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\x02\"H\n\x19TaskContainerWaitResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.modal.client.GenericResult\"7\n\x13TaskExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecPollResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\x9b\x04\n\x14TaskExecStartRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63ommand_args\x18\x03 \x03(\t\x12\x46\n\rstdout_config\x18\x04 \x01(\x0e\x32/.modal.task_command_router.TaskExecStdoutConfig\x12\x46\n\rstderr_config\x18\x05 \x01(\x0e\x32/.modal.task_command_router.TaskExecStderrConfig\x12\x19\n\x0ctimeout_secs\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07workdir\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12,\n\x08pty_info\x18\t \x01(\x0b\x32\x15.modal.client.PTYInfoH\x02\x88\x01\x01\x12\x15\n\rruntime_debug\x18\n \x01(\x08\x12\x14\n\x0c\x63ontainer_id\x18\x0b \x01(\t\x12\x45\n\x03\x65nv\x18\x0c \x03(\x0b\x32\x38.modal.task_command_router.TaskExecStartRequest.EnvEntry\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0f\n\r_timeout_secsB\n\n\x08_workdirB\x0b\n\t_pty_info\"\x17\n\x15TaskExecStartResponse\">\n\x1aTaskExecStdinStatusRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"H\n\x1bTaskExecStdinStatusResponse\x12\x19\n\x11num_bytes_written\x18\x01 \x01(\x04\x12\x0e\n\x06\x63losed\x18\x02 \x01(\x08\"h\n\x19TaskExecStdinWriteRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x05 \x01(\x08\"\x1c\n\x1aTaskExecStdinWriteResponse\"\x1d\n\x1bTaskExecStdinWriteStreamEnd\"\xce\x01\n\x1fTaskExecStdinWriteStreamRequest\x12I\n\x05start\x18\x01 \x01(\x0b\x32\x38.modal.task_command_router.TaskExecStdinWriteStreamStartH\x00\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x12\x45\n\x03\x65nd\x18\x03 \x01(\x0b\x32\x36.modal.task_command_router.TaskExecStdinWriteStreamEndH\x00\x42\t\n\x07payload\"\"\n TaskExecStdinWriteStreamResponse\"Q\n\x1dTaskExecStdinWriteStreamStart\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\"\x9d\x01\n\x18TaskExecStdioReadRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12O\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x36.modal.task_command_router.TaskExecStdioFileDescriptor\")\n\x19TaskExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"7\n\x13TaskExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecWaitResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\xa0\x01\n\x19TaskMountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x10\n\x08image_id\x18\x03 \x01(\t\x12-\n customer_supplied_encryption_key\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x42#\n!_customer_supplied_encryption_key\"A\n\x18TaskReloadVolumesRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\"\x1b\n\x19TaskReloadVolumesResponse\"c\n\x1bTaskSetNetworkAccessRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x33\n\x0enetwork_access\x18\x02 \x01(\x0b\x32\x1b.modal.client.NetworkAccess\"\x1e\n\x1cTaskSetNetworkAccessResponse\"\xd0\x01\n\x1cTaskSnapshotDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x13\n\x0bsnapshot_id\x18\x03 \x01(\t\x12\x18\n\x0bttl_seconds\x18\x04 \x01(\x03H\x00\x88\x01\x01\x12-\n customer_supplied_encryption_key\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x42\x0e\n\x0c_ttl_secondsB#\n!_customer_supplied_encryption_key\"1\n\x1dTaskSnapshotDirectoryResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t\"\xc3\x01\n\x1dTaskSnapshotFilesystemRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x13\n\x0bsnapshot_id\x18\x02 \x01(\t\x12\x18\n\x0bttl_seconds\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12-\n customer_supplied_encryption_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x0e\n\x0c_ttl_secondsB#\n!_customer_supplied_encryption_key\"2\n\x1eTaskSnapshotFilesystemResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t\"E\n\x19TaskSnapshotMemoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x17\n\x0fidempotency_key\x18\x02 \x01(\t\"1\n\x1aTaskSnapshotMemoryResponse\x12\x13\n\x0bsnapshot_id\x18\x01 \x01(\t\"<\n\x1bTaskUnmountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c*p\n\x1aSandboxStdioFileDescriptor\x12(\n$SANDBOX_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12(\n$SANDBOX_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*\x81\x01\n\x14TaskExecStderrConfig\x12#\n\x1fTASK_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12\"\n\x1eTASK_EXEC_STDERR_CONFIG_STDOUT\x10\x02*u\n\x1bTaskExecStdioFileDescriptor\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*]\n\x14TaskExecStdoutConfig\x12#\n\x1fTASK_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\xba\x16\n\x11TaskCommandRouter\x12\x84\x01\n\x13SandboxStdinWriteV2\x12\x35.modal.task_command_router.SandboxStdinWriteV2Request\x1a\x36.modal.task_command_router.SandboxStdinWriteV2Response\x12\x83\x01\n\x12SandboxStdioReadV2\x12\x34.modal.task_command_router.SandboxStdioReadV2Request\x1a\x35.modal.task_command_router.SandboxStdioReadV2Response0\x01\x12\x90\x01\n\x15SandboxWaitUntilReady\x12:.modal.task_command_router.SandboxWaitUntilReadyTcrRequest\x1a;.modal.task_command_router.SandboxWaitUntilReadyTcrResponse\x12\x84\x01\n\x13TaskContainerCreate\x12\x35.modal.task_command_router.TaskContainerCreateRequest\x1a\x36.modal.task_command_router.TaskContainerCreateResponse\x12{\n\x10TaskContainerGet\x12\x32.modal.task_command_router.TaskContainerGetRequest\x1a\x33.modal.task_command_router.TaskContainerGetResponse\x12~\n\x11TaskContainerList\x12\x33.modal.task_command_router.TaskContainerListRequest\x1a\x34.modal.task_command_router.TaskContainerListResponse\x12\x8d\x01\n\x16TaskContainerTerminate\x12\x38.modal.task_command_router.TaskContainerTerminateRequest\x1a\x39.modal.task_command_router.TaskContainerTerminateResponse\x12~\n\x11TaskContainerWait\x12\x33.modal.task_command_router.TaskContainerWaitRequest\x1a\x34.modal.task_command_router.TaskContainerWaitResponse\x12o\n\x0cTaskExecPoll\x12..modal.task_command_router.TaskExecPollRequest\x1a/.modal.task_command_router.TaskExecPollResponse\x12r\n\rTaskExecStart\x12/.modal.task_command_router.TaskExecStartRequest\x1a\x30.modal.task_command_router.TaskExecStartResponse\x12\x84\x01\n\x13TaskExecStdinStatus\x12\x35.modal.task_command_router.TaskExecStdinStatusRequest\x1a\x36.modal.task_command_router.TaskExecStdinStatusResponse\x12\x81\x01\n\x12TaskExecStdinWrite\x12\x34.modal.task_command_router.TaskExecStdinWriteRequest\x1a\x35.modal.task_command_router.TaskExecStdinWriteResponse\x12\x95\x01\n\x18TaskExecStdinWriteStream\x12:.modal.task_command_router.TaskExecStdinWriteStreamRequest\x1a;.modal.task_command_router.TaskExecStdinWriteStreamResponse(\x01\x12\x80\x01\n\x11TaskExecStdioRead\x12\x33.modal.task_command_router.TaskExecStdioReadRequest\x1a\x34.modal.task_command_router.TaskExecStdioReadResponse0\x01\x12o\n\x0cTaskExecWait\x12..modal.task_command_router.TaskExecWaitRequest\x1a/.modal.task_command_router.TaskExecWaitResponse\x12\x62\n\x12TaskMountDirectory\x12\x34.modal.task_command_router.TaskMountDirectoryRequest\x1a\x16.google.protobuf.Empty\x12~\n\x11TaskReloadVolumes\x12\x33.modal.task_command_router.TaskReloadVolumesRequest\x1a\x34.modal.task_command_router.TaskReloadVolumesResponse\x12\x87\x01\n\x14TaskSetNetworkAccess\x12\x36.modal.task_command_router.TaskSetNetworkAccessRequest\x1a\x37.modal.task_command_router.TaskSetNetworkAccessResponse\x12\x8a\x01\n\x15TaskSnapshotDirectory\x12\x37.modal.task_command_router.TaskSnapshotDirectoryRequest\x1a\x38.modal.task_command_router.TaskSnapshotDirectoryResponse\x12\x8d\x01\n\x16TaskSnapshotFilesystem\x12\x38.modal.task_command_router.TaskSnapshotFilesystemRequest\x1a\x39.modal.task_command_router.TaskSnapshotFilesystemResponse\x12\x81\x01\n\x12TaskSnapshotMemory\x12\x34.modal.task_command_router.TaskSnapshotMemoryRequest\x1a\x35.modal.task_command_router.TaskSnapshotMemoryResponse\x12\x66\n\x14TaskUnmountDirectory\x12\x36.modal.task_command_router.TaskUnmountDirectoryRequest\x1a\x16.google.protobuf.EmptyB&Z$github.com/modal-labs/modal/go/protob\x06proto3')
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%modal_proto/task_command_router.proto\x12\x19modal.task_command_router\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15modal_proto/api.proto\"X\n\x1aSandboxStdinWriteV2Request\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x04 \x01(\x08\"\x1d\n\x1bSandboxStdinWriteV2Response\"\x8c\x01\n\x19SandboxStdioReadV2Request\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x04\x12N\n\x0f\x66ile_descriptor\x18\x03 \x01(\x0e\x32\x35.modal.task_command_router.SandboxStdioFileDescriptor\"C\n\x1aSandboxStdioReadV2Response\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x17\n\x0fstarting_offset\x18\x02 \x01(\x04\"C\n\x1fSandboxWaitUntilReadyTcrRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07timeout\x18\x02 \x01(\x02\"4\n SandboxWaitUntilReadyTcrResponse\x12\x10\n\x08ready_at\x18\x01 \x01(\x01\"\xbd\x03\n\x1aTaskContainerCreateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x10\n\x08image_id\x18\x03 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x05 \x03(\t\x12K\n\x03\x65nv\x18\x06 \x03(\x0b\x32>.modal.task_command_router.TaskContainerCreateRequest.EnvEntry\x12\x0f\n\x07workdir\x18\x07 \x01(\t\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12\x30\n\rvolume_mounts\x18\t \x03(\x0b\x32\x19.modal.client.VolumeMount\x12\x38\n\x0enetwork_access\x18\n \x01(\x0b\x32\x1b.modal.client.NetworkAccessH\x00\x88\x01\x01\x12,\n\x08pty_info\x18\x0b \x01(\x0b\x32\x15.modal.client.PTYInfoH\x01\x88\x01\x01\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x11\n\x0f_network_accessB\x0b\n\t_pty_info\"K\n\x1bTaskContainerCreateResponse\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\"^\n\x17TaskContainerGetRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x1a\n\x12include_terminated\x18\x03 \x01(\x08\"[\n\x18TaskContainerGetResponse\x12?\n\tcontainer\x18\x01 \x01(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"~\n\x11TaskContainerInfo\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12+\n\x06result\x18\x04 \x01(\x0b\x32\x1b.modal.client.GenericResult\"G\n\x18TaskContainerListRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x1a\n\x12include_terminated\x18\x02 \x01(\x08\"]\n\x19TaskContainerListResponse\x12@\n\ncontainers\x18\x01 \x03(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"F\n\x1dTaskContainerTerminateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\" \n\x1eTaskContainerTerminateResponse\"R\n\x18TaskContainerWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\x02\"H\n\x19TaskContainerWaitResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.modal.client.GenericResult\"7\n\x13TaskExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecPollResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\x9b\x04\n\x14TaskExecStartRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63ommand_args\x18\x03 \x03(\t\x12\x46\n\rstdout_config\x18\x04 \x01(\x0e\x32/.modal.task_command_router.TaskExecStdoutConfig\x12\x46\n\rstderr_config\x18\x05 \x01(\x0e\x32/.modal.task_command_router.TaskExecStderrConfig\x12\x19\n\x0ctimeout_secs\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07workdir\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12,\n\x08pty_info\x18\t \x01(\x0b\x32\x15.modal.client.PTYInfoH\x02\x88\x01\x01\x12\x15\n\rruntime_debug\x18\n \x01(\x08\x12\x14\n\x0c\x63ontainer_id\x18\x0b \x01(\t\x12\x45\n\x03\x65nv\x18\x0c \x03(\x0b\x32\x38.modal.task_command_router.TaskExecStartRequest.EnvEntry\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0f\n\r_timeout_secsB\n\n\x08_workdirB\x0b\n\t_pty_info\"\x17\n\x15TaskExecStartResponse\">\n\x1aTaskExecStdinStatusRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"H\n\x1bTaskExecStdinStatusResponse\x12\x19\n\x11num_bytes_written\x18\x01 \x01(\x04\x12\x0e\n\x06\x63losed\x18\x02 \x01(\x08\"h\n\x19TaskExecStdinWriteRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x05 \x01(\x08\"\x1c\n\x1aTaskExecStdinWriteResponse\"\x1d\n\x1bTaskExecStdinWriteStreamEnd\"\xce\x01\n\x1fTaskExecStdinWriteStreamRequest\x12I\n\x05start\x18\x01 \x01(\x0b\x32\x38.modal.task_command_router.TaskExecStdinWriteStreamStartH\x00\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x12\x45\n\x03\x65nd\x18\x03 \x01(\x0b\x32\x36.modal.task_command_router.TaskExecStdinWriteStreamEndH\x00\x42\t\n\x07payload\"\"\n TaskExecStdinWriteStreamResponse\"Q\n\x1dTaskExecStdinWriteStreamStart\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\"\x9d\x01\n\x18TaskExecStdioReadRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12O\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x36.modal.task_command_router.TaskExecStdioFileDescriptor\")\n\x19TaskExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"7\n\x13TaskExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecWaitResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\xa0\x01\n\x19TaskMountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x10\n\x08image_id\x18\x03 \x01(\t\x12-\n customer_supplied_encryption_key\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x42#\n!_customer_supplied_encryption_key\"A\n\x18TaskReloadVolumesRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\"\x1b\n\x19TaskReloadVolumesResponse\"c\n\x1bTaskSetNetworkAccessRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x33\n\x0enetwork_access\x18\x02 \x01(\x0b\x32\x1b.modal.client.NetworkAccess\"\x1e\n\x1cTaskSetNetworkAccessResponse\"\xd0\x01\n\x1cTaskSnapshotDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x13\n\x0bsnapshot_id\x18\x03 \x01(\t\x12\x18\n\x0bttl_seconds\x18\x04 \x01(\x03H\x00\x88\x01\x01\x12-\n customer_supplied_encryption_key\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x42\x0e\n\x0c_ttl_secondsB#\n!_customer_supplied_encryption_key\"1\n\x1dTaskSnapshotDirectoryResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t\"\xd9\x01\n\x1dTaskSnapshotFilesystemRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x13\n\x0bsnapshot_id\x18\x02 \x01(\t\x12\x18\n\x0bttl_seconds\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12-\n customer_supplied_encryption_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x14\n\x0c\x63ontainer_id\x18\x05 \x01(\tB\x0e\n\x0c_ttl_secondsB#\n!_customer_supplied_encryption_key\"2\n\x1eTaskSnapshotFilesystemResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t\"E\n\x19TaskSnapshotMemoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x17\n\x0fidempotency_key\x18\x02 \x01(\t\"1\n\x1aTaskSnapshotMemoryResponse\x12\x13\n\x0bsnapshot_id\x18\x01 \x01(\t\"<\n\x1bTaskUnmountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c*p\n\x1aSandboxStdioFileDescriptor\x12(\n$SANDBOX_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12(\n$SANDBOX_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*\x81\x01\n\x14TaskExecStderrConfig\x12#\n\x1fTASK_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12\"\n\x1eTASK_EXEC_STDERR_CONFIG_STDOUT\x10\x02*u\n\x1bTaskExecStdioFileDescriptor\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*]\n\x14TaskExecStdoutConfig\x12#\n\x1fTASK_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\xba\x16\n\x11TaskCommandRouter\x12\x84\x01\n\x13SandboxStdinWriteV2\x12\x35.modal.task_command_router.SandboxStdinWriteV2Request\x1a\x36.modal.task_command_router.SandboxStdinWriteV2Response\x12\x83\x01\n\x12SandboxStdioReadV2\x12\x34.modal.task_command_router.SandboxStdioReadV2Request\x1a\x35.modal.task_command_router.SandboxStdioReadV2Response0\x01\x12\x90\x01\n\x15SandboxWaitUntilReady\x12:.modal.task_command_router.SandboxWaitUntilReadyTcrRequest\x1a;.modal.task_command_router.SandboxWaitUntilReadyTcrResponse\x12\x84\x01\n\x13TaskContainerCreate\x12\x35.modal.task_command_router.TaskContainerCreateRequest\x1a\x36.modal.task_command_router.TaskContainerCreateResponse\x12{\n\x10TaskContainerGet\x12\x32.modal.task_command_router.TaskContainerGetRequest\x1a\x33.modal.task_command_router.TaskContainerGetResponse\x12~\n\x11TaskContainerList\x12\x33.modal.task_command_router.TaskContainerListRequest\x1a\x34.modal.task_command_router.TaskContainerListResponse\x12\x8d\x01\n\x16TaskContainerTerminate\x12\x38.modal.task_command_router.TaskContainerTerminateRequest\x1a\x39.modal.task_command_router.TaskContainerTerminateResponse\x12~\n\x11TaskContainerWait\x12\x33.modal.task_command_router.TaskContainerWaitRequest\x1a\x34.modal.task_command_router.TaskContainerWaitResponse\x12o\n\x0cTaskExecPoll\x12..modal.task_command_router.TaskExecPollRequest\x1a/.modal.task_command_router.TaskExecPollResponse\x12r\n\rTaskExecStart\x12/.modal.task_command_router.TaskExecStartRequest\x1a\x30.modal.task_command_router.TaskExecStartResponse\x12\x84\x01\n\x13TaskExecStdinStatus\x12\x35.modal.task_command_router.TaskExecStdinStatusRequest\x1a\x36.modal.task_command_router.TaskExecStdinStatusResponse\x12\x81\x01\n\x12TaskExecStdinWrite\x12\x34.modal.task_command_router.TaskExecStdinWriteRequest\x1a\x35.modal.task_command_router.TaskExecStdinWriteResponse\x12\x95\x01\n\x18TaskExecStdinWriteStream\x12:.modal.task_command_router.TaskExecStdinWriteStreamRequest\x1a;.modal.task_command_router.TaskExecStdinWriteStreamResponse(\x01\x12\x80\x01\n\x11TaskExecStdioRead\x12\x33.modal.task_command_router.TaskExecStdioReadRequest\x1a\x34.modal.task_command_router.TaskExecStdioReadResponse0\x01\x12o\n\x0cTaskExecWait\x12..modal.task_command_router.TaskExecWaitRequest\x1a/.modal.task_command_router.TaskExecWaitResponse\x12\x62\n\x12TaskMountDirectory\x12\x34.modal.task_command_router.TaskMountDirectoryRequest\x1a\x16.google.protobuf.Empty\x12~\n\x11TaskReloadVolumes\x12\x33.modal.task_command_router.TaskReloadVolumesRequest\x1a\x34.modal.task_command_router.TaskReloadVolumesResponse\x12\x87\x01\n\x14TaskSetNetworkAccess\x12\x36.modal.task_command_router.TaskSetNetworkAccessRequest\x1a\x37.modal.task_command_router.TaskSetNetworkAccessResponse\x12\x8a\x01\n\x15TaskSnapshotDirectory\x12\x37.modal.task_command_router.TaskSnapshotDirectoryRequest\x1a\x38.modal.task_command_router.TaskSnapshotDirectoryResponse\x12\x8d\x01\n\x16TaskSnapshotFilesystem\x12\x38.modal.task_command_router.TaskSnapshotFilesystemRequest\x1a\x39.modal.task_command_router.TaskSnapshotFilesystemResponse\x12\x81\x01\n\x12TaskSnapshotMemory\x12\x34.modal.task_command_router.TaskSnapshotMemoryRequest\x1a\x35.modal.task_command_router.TaskSnapshotMemoryResponse\x12\x66\n\x14TaskUnmountDirectory\x12\x36.modal.task_command_router.TaskUnmountDirectoryRequest\x1a\x16.google.protobuf.EmptyB&Z$github.com/modal-labs/modal/go/protob\x06proto3')
21
21
 
22
22
  _SANDBOXSTDIOFILEDESCRIPTOR = DESCRIPTOR.enum_types_by_name['SandboxStdioFileDescriptor']
23
23
  SandboxStdioFileDescriptor = enum_type_wrapper.EnumTypeWrapper(_SANDBOXSTDIOFILEDESCRIPTOR)
@@ -425,14 +425,14 @@ if _descriptor._USE_C_DESCRIPTORS == False:
425
425
  _TASKCONTAINERCREATEREQUEST_ENVENTRY._serialized_options = b'8\001'
426
426
  _TASKEXECSTARTREQUEST_ENVENTRY._options = None
427
427
  _TASKEXECSTARTREQUEST_ENVENTRY._serialized_options = b'8\001'
428
- _SANDBOXSTDIOFILEDESCRIPTOR._serialized_start=4601
429
- _SANDBOXSTDIOFILEDESCRIPTOR._serialized_end=4713
430
- _TASKEXECSTDERRCONFIG._serialized_start=4716
431
- _TASKEXECSTDERRCONFIG._serialized_end=4845
432
- _TASKEXECSTDIOFILEDESCRIPTOR._serialized_start=4847
433
- _TASKEXECSTDIOFILEDESCRIPTOR._serialized_end=4964
434
- _TASKEXECSTDOUTCONFIG._serialized_start=4966
435
- _TASKEXECSTDOUTCONFIG._serialized_end=5059
428
+ _SANDBOXSTDIOFILEDESCRIPTOR._serialized_start=4623
429
+ _SANDBOXSTDIOFILEDESCRIPTOR._serialized_end=4735
430
+ _TASKEXECSTDERRCONFIG._serialized_start=4738
431
+ _TASKEXECSTDERRCONFIG._serialized_end=4867
432
+ _TASKEXECSTDIOFILEDESCRIPTOR._serialized_start=4869
433
+ _TASKEXECSTDIOFILEDESCRIPTOR._serialized_end=4986
434
+ _TASKEXECSTDOUTCONFIG._serialized_start=4988
435
+ _TASKEXECSTDOUTCONFIG._serialized_end=5081
436
436
  _SANDBOXSTDINWRITEV2REQUEST._serialized_start=120
437
437
  _SANDBOXSTDINWRITEV2REQUEST._serialized_end=208
438
438
  _SANDBOXSTDINWRITEV2RESPONSE._serialized_start=210
@@ -518,15 +518,15 @@ if _descriptor._USE_C_DESCRIPTORS == False:
518
518
  _TASKSNAPSHOTDIRECTORYRESPONSE._serialized_start=4116
519
519
  _TASKSNAPSHOTDIRECTORYRESPONSE._serialized_end=4165
520
520
  _TASKSNAPSHOTFILESYSTEMREQUEST._serialized_start=4168
521
- _TASKSNAPSHOTFILESYSTEMREQUEST._serialized_end=4363
522
- _TASKSNAPSHOTFILESYSTEMRESPONSE._serialized_start=4365
523
- _TASKSNAPSHOTFILESYSTEMRESPONSE._serialized_end=4415
524
- _TASKSNAPSHOTMEMORYREQUEST._serialized_start=4417
525
- _TASKSNAPSHOTMEMORYREQUEST._serialized_end=4486
526
- _TASKSNAPSHOTMEMORYRESPONSE._serialized_start=4488
527
- _TASKSNAPSHOTMEMORYRESPONSE._serialized_end=4537
528
- _TASKUNMOUNTDIRECTORYREQUEST._serialized_start=4539
529
- _TASKUNMOUNTDIRECTORYREQUEST._serialized_end=4599
530
- _TASKCOMMANDROUTER._serialized_start=5062
531
- _TASKCOMMANDROUTER._serialized_end=7936
521
+ _TASKSNAPSHOTFILESYSTEMREQUEST._serialized_end=4385
522
+ _TASKSNAPSHOTFILESYSTEMRESPONSE._serialized_start=4387
523
+ _TASKSNAPSHOTFILESYSTEMRESPONSE._serialized_end=4437
524
+ _TASKSNAPSHOTMEMORYREQUEST._serialized_start=4439
525
+ _TASKSNAPSHOTMEMORYREQUEST._serialized_end=4508
526
+ _TASKSNAPSHOTMEMORYRESPONSE._serialized_start=4510
527
+ _TASKSNAPSHOTMEMORYRESPONSE._serialized_end=4559
528
+ _TASKUNMOUNTDIRECTORYREQUEST._serialized_start=4561
529
+ _TASKUNMOUNTDIRECTORYREQUEST._serialized_end=4621
530
+ _TASKCOMMANDROUTER._serialized_start=5084
531
+ _TASKCOMMANDROUTER._serialized_end=7958
532
532
  # @@protoc_insertion_point(module_scope)
@@ -985,6 +985,7 @@ class TaskSnapshotFilesystemRequest(google.protobuf.message.Message):
985
985
  SNAPSHOT_ID_FIELD_NUMBER: builtins.int
986
986
  TTL_SECONDS_FIELD_NUMBER: builtins.int
987
987
  CUSTOMER_SUPPLIED_ENCRYPTION_KEY_FIELD_NUMBER: builtins.int
988
+ CONTAINER_ID_FIELD_NUMBER: builtins.int
988
989
  task_id: builtins.str
989
990
  snapshot_id: builtins.str
990
991
  """A unique ID to ensure idempotency of filesystem snapshot requests."""
@@ -1001,6 +1002,8 @@ class TaskSnapshotFilesystemRequest(google.protobuf.message.Message):
1001
1002
  """Customer-supplied encryption key used to encrypt the resulting image's data and tree
1002
1003
  metadata keys. This key is not persisted by Modal.
1003
1004
  """
1005
+ container_id: builtins.str
1006
+ """Fully qualified target container ID. Empty targets the main container."""
1004
1007
  def __init__(
1005
1008
  self,
1006
1009
  *,
@@ -1008,9 +1011,10 @@ class TaskSnapshotFilesystemRequest(google.protobuf.message.Message):
1008
1011
  snapshot_id: builtins.str = ...,
1009
1012
  ttl_seconds: builtins.int | None = ...,
1010
1013
  customer_supplied_encryption_key: builtins.bytes | None = ...,
1014
+ container_id: builtins.str = ...,
1011
1015
  ) -> None: ...
1012
1016
  def HasField(self, field_name: typing_extensions.Literal["_customer_supplied_encryption_key", b"_customer_supplied_encryption_key", "_ttl_seconds", b"_ttl_seconds", "customer_supplied_encryption_key", b"customer_supplied_encryption_key", "ttl_seconds", b"ttl_seconds"]) -> builtins.bool: ...
1013
- def ClearField(self, field_name: typing_extensions.Literal["_customer_supplied_encryption_key", b"_customer_supplied_encryption_key", "_ttl_seconds", b"_ttl_seconds", "customer_supplied_encryption_key", b"customer_supplied_encryption_key", "snapshot_id", b"snapshot_id", "task_id", b"task_id", "ttl_seconds", b"ttl_seconds"]) -> None: ...
1017
+ def ClearField(self, field_name: typing_extensions.Literal["_customer_supplied_encryption_key", b"_customer_supplied_encryption_key", "_ttl_seconds", b"_ttl_seconds", "container_id", b"container_id", "customer_supplied_encryption_key", b"customer_supplied_encryption_key", "snapshot_id", b"snapshot_id", "task_id", b"task_id", "ttl_seconds", b"ttl_seconds"]) -> None: ...
1014
1018
  @typing.overload
1015
1019
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_customer_supplied_encryption_key", b"_customer_supplied_encryption_key"]) -> typing_extensions.Literal["customer_supplied_encryption_key"] | None: ...
1016
1020
  @typing.overload
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2026
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.5.5.dev12"
4
+ __version__ = "1.5.5.dev14"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes