runpod 2.0.0rc1__tar.gz → 2.0.1.dev1__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 (372) hide show
  1. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/workflows/cd.yml +6 -6
  2. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/workflows/ci.yml +10 -7
  3. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/workflows/vhs.yml +1 -1
  4. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/CHANGELOG.md +25 -0
  5. {runpod-2.0.0rc1/runpod.egg-info → runpod-2.0.1.dev1}/PKG-INFO +17 -11
  6. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/README.md +4 -0
  7. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/volume_cache.md +22 -4
  8. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/pytest.ini +1 -0
  9. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/requirements.txt +12 -10
  10. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_health/gpu.py +17 -5
  11. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_health/system.py +82 -8
  12. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_version.py +3 -3
  13. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/mutations/apps.py +0 -6
  14. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/queries/apps.py +0 -8
  15. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/rest.py +62 -6
  16. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/api.py +31 -10
  17. runpod-2.0.1.dev1/runpod/apps/auth.py +185 -0
  18. runpod-2.0.1.dev1/runpod/apps/build.py +722 -0
  19. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/deploy.py +8 -2
  20. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/dev.py +51 -8
  21. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/gpu.py +160 -11
  22. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/logs.py +46 -16
  23. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/volume.py +27 -1
  24. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/ssh/functions.py +2 -7
  25. runpod-2.0.1.dev1/runpod/rp_cli/api.py +30 -0
  26. runpod-2.0.1.dev1/runpod/rp_cli/catalog.py +308 -0
  27. runpod-2.0.1.dev1/runpod/rp_cli/compute.py +258 -0
  28. runpod-2.0.1.dev1/runpod/rp_cli/endpoint.py +1215 -0
  29. runpod-2.0.1.dev1/runpod/rp_cli/endpoint_config.py +292 -0
  30. runpod-2.0.1.dev1/runpod/rp_cli/logs.py +157 -0
  31. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/rp_cli/main.py +144 -17
  32. runpod-2.0.1.dev1/runpod/rp_cli/options.py +64 -0
  33. runpod-2.0.1.dev1/runpod/rp_cli/output.py +115 -0
  34. runpod-2.0.1.dev1/runpod/rp_cli/pod.py +783 -0
  35. runpod-2.0.1.dev1/runpod/rp_cli/volume.py +298 -0
  36. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_scale.py +80 -14
  37. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_debugger.py +17 -7
  38. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_volume_cache.py +341 -26
  39. {runpod-2.0.0rc1 → runpod-2.0.1.dev1/runpod.egg-info}/PKG-INFO +17 -11
  40. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod.egg-info/SOURCES.txt +23 -0
  41. runpod-2.0.1.dev1/runpod.egg-info/requires.txt +24 -0
  42. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod.egg-info/scm_file_list.json +23 -0
  43. runpod-2.0.1.dev1/runpod.egg-info/scm_version.json +8 -0
  44. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_api/test_rest.py +155 -3
  45. runpod-2.0.1.dev1/tests/test_apps/conftest.py +15 -0
  46. runpod-2.0.1.dev1/tests/test_apps/test_agent_auth.py +242 -0
  47. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_api_client.py +180 -2
  48. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_app.py +74 -0
  49. runpod-2.0.1.dev1/tests/test_apps/test_build.py +646 -0
  50. runpod-2.0.1.dev1/tests/test_apps/test_gpu_catalog.py +246 -0
  51. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_logs.py +143 -0
  52. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_volume.py +38 -0
  53. runpod-2.0.1.dev1/tests/test_cli/test_agent_login.py +185 -0
  54. runpod-2.0.1.dev1/tests/test_cli/test_catalog_command.py +318 -0
  55. runpod-2.0.1.dev1/tests/test_cli/test_cli_api.py +42 -0
  56. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_groups/test_ssh_functions.py +40 -13
  57. runpod-2.0.1.dev1/tests/test_cli/test_cli_logs.py +288 -0
  58. runpod-2.0.1.dev1/tests/test_cli/test_cli_options.py +98 -0
  59. runpod-2.0.1.dev1/tests/test_cli/test_cli_output.py +120 -0
  60. runpod-2.0.1.dev1/tests/test_cli/test_compute.py +199 -0
  61. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_deploy_command.py +187 -0
  62. runpod-2.0.1.dev1/tests/test_cli/test_endpoint_command.py +1356 -0
  63. runpod-2.0.1.dev1/tests/test_cli/test_pod_command.py +946 -0
  64. runpod-2.0.1.dev1/tests/test_cli/test_volume_command.py +339 -0
  65. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_performance/test_cold_start.py +13 -0
  66. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_gpu_checks.py +39 -0
  67. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_system_checks.py +107 -0
  68. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_rp_scale.py +264 -0
  69. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_debugger.py +36 -8
  70. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_rp_volume_cache.py +587 -4
  71. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_worker.py +8 -3
  72. runpod-2.0.0rc1/runpod/apps/auth.py +0 -77
  73. runpod-2.0.0rc1/runpod/apps/build.py +0 -378
  74. runpod-2.0.0rc1/runpod.egg-info/requires.txt +0 -22
  75. runpod-2.0.0rc1/runpod.egg-info/scm_version.json +0 -8
  76. runpod-2.0.0rc1/tests/test_apps/test_build.py +0 -255
  77. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.dockerignore +0 -0
  78. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  79. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  80. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/dependabot.yml +0 -0
  81. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/tape_collection/cli_config.tape +0 -0
  82. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/tape_collection/cli_help.tape +0 -0
  83. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/tape_collection/cli_ssh.tape +0 -0
  84. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.github/tests.json +0 -0
  85. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/.gitignore +0 -0
  86. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/ARCHITECTURE.md +0 -0
  87. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/CONTRIBUTING.md +0 -0
  88. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/LICENSE +0 -0
  89. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/MANIFEST.in +0 -0
  90. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/Makefile +0 -0
  91. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/SECURITY.md +0 -0
  92. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/build_tools/compile_gpu_test.sh +0 -0
  93. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/build_tools/gpu_test.c +0 -0
  94. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/api/handling_errors.md +0 -0
  95. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/api/queries.md +0 -0
  96. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/demos/config.gif +0 -0
  97. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/demos/help.gif +0 -0
  98. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/demos/ssh.gif +0 -0
  99. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/references/command_line_interface.md +0 -0
  100. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/references/projects.md +0 -0
  101. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/references/runpod.toml.md +0 -0
  102. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/cli/start_here.md +0 -0
  103. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/getting_Started.md +0 -0
  104. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/images/env_var_location.png +0 -0
  105. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/functions/error_handling.md +0 -0
  106. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/functions/logging.md +0 -0
  107. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/gpu_binary_compilation.md +0 -0
  108. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/local_testing.md +0 -0
  109. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/utils/rp_cleanup.md +0 -0
  110. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/utils/rp_debugger.md +0 -0
  111. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/utils/rp_download.md +0 -0
  112. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/utils/rp_upload.md +0 -0
  113. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/utils/rp_validator.md +0 -0
  114. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/worker.md +0 -0
  115. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/worker_fitness_checks.md +0 -0
  116. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/docs/serverless/worker_realtime.md +0 -0
  117. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/api/create_container_registry_auth.py +0 -0
  118. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/api/create_endpoint.py +0 -0
  119. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/api/create_template.py +0 -0
  120. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/api/get_endpoints.py +0 -0
  121. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/apps/README.md +0 -0
  122. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/apps/gpu_inference.py +0 -0
  123. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/apps/hello_world.py +0 -0
  124. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/apps/streaming.py +0 -0
  125. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/apps/train_and_eval.py +0 -0
  126. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/apps/web_service.py +0 -0
  127. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/endpoints/asyncio_job_request.py +0 -0
  128. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/endpoints/health.py +0 -0
  129. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/endpoints/run.py +0 -0
  130. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/endpoints/run_sync.py +0 -0
  131. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/endpoints/streaming.py +0 -0
  132. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/rest_wrapper.py +0 -0
  133. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/serverless/concurrent_handler.py +0 -0
  134. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/serverless/logger.py +0 -0
  135. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/serverless/simple_handler.py +0 -0
  136. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/examples/serverless/volume_cache_handler.py +0 -0
  137. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/pyproject.toml +0 -0
  138. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/__init__.py +0 -0
  139. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_binary_helpers.py +0 -0
  140. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_health/__init__.py +0 -0
  141. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_health/cuda.py +0 -0
  142. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_health/fitness.py +0 -0
  143. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_logger.py +0 -0
  144. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/_startup.py +0 -0
  145. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/agent.py +0 -0
  146. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/__init__.py +0 -0
  147. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/ctl_commands.py +0 -0
  148. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/graphql.py +0 -0
  149. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/mutations/__init__.py +0 -0
  150. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/mutations/container_register_auth.py +0 -0
  151. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/queries/__init__.py +0 -0
  152. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/api/queries/user.py +0 -0
  153. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/__init__.py +0 -0
  154. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/app.py +0 -0
  155. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/context.py +0 -0
  156. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/datacenter.py +0 -0
  157. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/discovery.py +0 -0
  158. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/discovery_state.py +0 -0
  159. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/entrypoint.py +0 -0
  160. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/errors.py +0 -0
  161. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/handles.py +0 -0
  162. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/images.py +0 -0
  163. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/init.py +0 -0
  164. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/invoker.py +0 -0
  165. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/job.py +0 -0
  166. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/manage.py +0 -0
  167. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/markers.py +0 -0
  168. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/model.py +0 -0
  169. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/monitor.py +0 -0
  170. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/placement.py +0 -0
  171. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/protocol.py +0 -0
  172. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/registry.py +0 -0
  173. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/schedule.py +0 -0
  174. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/secret.py +0 -0
  175. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/serialization.py +0 -0
  176. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/shim.py +0 -0
  177. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/spec.py +0 -0
  178. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/stubs.py +0 -0
  179. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/targets.py +0 -0
  180. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/tasks.py +0 -0
  181. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/utils/__init__.py +0 -0
  182. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/utils/client.py +0 -0
  183. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/utils/events.py +0 -0
  184. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/utils/lookup.py +0 -0
  185. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/utils/names.py +0 -0
  186. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/utils/network.py +0 -0
  187. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/apps/watch.py +0 -0
  188. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/__init__.py +0 -0
  189. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/entry.py +0 -0
  190. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/__init__.py +0 -0
  191. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/config/__init__.py +0 -0
  192. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/config/functions.py +0 -0
  193. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/pod/__init__.py +0 -0
  194. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/pod/commands.py +0 -0
  195. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/ssh/__init__.py +0 -0
  196. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/groups/ssh/commands.py +0 -0
  197. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/utils/__init__.py +0 -0
  198. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/utils/rp_info.py +0 -0
  199. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/utils/rp_runpodignore.py +0 -0
  200. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/utils/rp_userspace.py +0 -0
  201. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/cli/utils/ssh_cmd.py +0 -0
  202. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/endpoint/__init__.py +0 -0
  203. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/endpoint/asyncio/__init__.py +0 -0
  204. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/endpoint/asyncio/asyncio_runner.py +0 -0
  205. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/endpoint/helpers.py +0 -0
  206. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/endpoint/runner.py +0 -0
  207. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/error.py +0 -0
  208. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/http_client.py +0 -0
  209. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/rp_cli/__init__.py +0 -0
  210. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/rp_cli/console.py +0 -0
  211. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/rp_cli/update.py +0 -0
  212. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/__init__.py +0 -0
  213. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/binaries/README.md +0 -0
  214. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/binaries/__init__.py +0 -0
  215. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/binaries/gpu_test +0 -0
  216. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/__init__.py +0 -0
  217. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_capture.py +0 -0
  218. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_fastapi.py +0 -0
  219. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_fitness.py +0 -0
  220. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_gpu_fitness.py +0 -0
  221. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_handler.py +0 -0
  222. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_http.py +0 -0
  223. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_job.py +0 -0
  224. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_local.py +0 -0
  225. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_logger.py +0 -0
  226. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_ping.py +0 -0
  227. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_prestart.py +0 -0
  228. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_progress.py +0 -0
  229. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_system_fitness.py +0 -0
  230. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/rp_tips.py +0 -0
  231. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/modules/worker_state.py +0 -0
  232. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/__init__.py +0 -0
  233. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_cleanup.py +0 -0
  234. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_cuda.py +0 -0
  235. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_download.py +0 -0
  236. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_model_cache.py +0 -0
  237. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_ssrf.py +0 -0
  238. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_upload.py +0 -0
  239. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/utils/rp_validator.py +0 -0
  240. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/serverless/worker.py +0 -0
  241. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/user_agent.py +0 -0
  242. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod/version.py +0 -0
  243. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod.egg-info/dependency_links.txt +0 -0
  244. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod.egg-info/entry_points.txt +0 -0
  245. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/runpod.egg-info/top_level.txt +0 -0
  246. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/scripts/README.md +0 -0
  247. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/scripts/benchmark_cold_start.sh +0 -0
  248. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/scripts/compare_benchmarks.py +0 -0
  249. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/setup.cfg +0 -0
  250. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/setup.py +0 -0
  251. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/__init__.py +0 -0
  252. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/__init__.py +0 -0
  253. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/apps_live_smoke.py +0 -0
  254. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/conftest.py +0 -0
  255. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/e2e_provisioner.py +0 -0
  256. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/01_hello_world.py +0 -0
  257. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/02_invocation_styles.py +0 -0
  258. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/03_gpu.py +0 -0
  259. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/04_dependencies.py +0 -0
  260. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/05_api_service.py +0 -0
  261. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/06_tasks.py +0 -0
  262. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/07_pipelines.py +0 -0
  263. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/08_volumes.py +0 -0
  264. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/09_secrets.py +0 -0
  265. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/10_cached_models.py +0 -0
  266. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/11_train_eval.py +0 -0
  267. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/12_custom_image.py +0 -0
  268. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/13_streaming.py +0 -0
  269. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/README.md +0 -0
  270. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/examples/run_all.sh +0 -0
  271. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/fixtures/cold_start/handler.py +0 -0
  272. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/fixtures/cold_start/pyproject.toml +0 -0
  273. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/matrix/main.py +0 -0
  274. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/matrix/run.py +0 -0
  275. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/task_pod_smoke.py +0 -0
  276. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/test_cold_start.py +0 -0
  277. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/test_mock_worker.py +0 -0
  278. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/e2e/tests.json +0 -0
  279. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/fixtures/mock_gpu_test +0 -0
  280. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_agent.py +0 -0
  281. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_api/__init__.py +0 -0
  282. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_api/test_ctl_commands.py +0 -0
  283. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/__init__.py +0 -0
  284. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_auth.py +0 -0
  285. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_compat_lock.py +0 -0
  286. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_config_params.py +0 -0
  287. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_deploy.py +0 -0
  288. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_dev.py +0 -0
  289. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_discovery.py +0 -0
  290. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_dispatch.py +0 -0
  291. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_images.py +0 -0
  292. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_job.py +0 -0
  293. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_manage.py +0 -0
  294. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_markers.py +0 -0
  295. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_model.py +0 -0
  296. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_monitor.py +0 -0
  297. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_placement.py +0 -0
  298. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_registry.py +0 -0
  299. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_retry.py +0 -0
  300. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_secret.py +0 -0
  301. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_shim.py +0 -0
  302. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_targets.py +0 -0
  303. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_tasks.py +0 -0
  304. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_apps/test_watch.py +0 -0
  305. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/__init__.py +0 -0
  306. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_groups/__init__.py +0 -0
  307. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_groups/test_config_functions.py +0 -0
  308. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_groups/test_pod_commands.py +0 -0
  309. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_groups/test_ssh_commands.py +0 -0
  310. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_groups/test_ssh_dispatch.py +0 -0
  311. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_utils/__init__.py +0 -0
  312. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_utils/test_info.py +0 -0
  313. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_utils/test_runpodignore.py +0 -0
  314. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_utils/test_ssh_cmd.py +0 -0
  315. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_cli_utils/test_userspace.py +0 -0
  316. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_console.py +0 -0
  317. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_init_command.py +0 -0
  318. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_management_commands.py +0 -0
  319. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_cli/test_update_command.py +0 -0
  320. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_endpoint/__init__.py +0 -0
  321. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_endpoint/test_asyncio_init.py +0 -0
  322. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_endpoint/test_asyncio_runner.py +0 -0
  323. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_endpoint/test_init.py +0 -0
  324. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_endpoint/test_runner.py +0 -0
  325. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_error.py +0 -0
  326. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_init.py +0 -0
  327. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_performance/__init__.py +0 -0
  328. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/__init__.py +0 -0
  329. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/local_sim/.env_example +0 -0
  330. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/local_sim/Makefile +0 -0
  331. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/local_sim/localhost.py +0 -0
  332. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/local_sim/worker.py +0 -0
  333. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_capture.py +0 -0
  334. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_init.py +0 -0
  335. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_integration_worker_state.py +0 -0
  336. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/__init__.py +0 -0
  337. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fastapi.py +0 -0
  338. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/__init__.py +0 -0
  339. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/conftest.py +0 -0
  340. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_force_kill.py +0 -0
  341. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_gpu_integration.py +0 -0
  342. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_registration.py +0 -0
  343. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_safe_startup.py +0 -0
  344. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_fitness/test_startup.py +0 -0
  345. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_handler.py +0 -0
  346. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_http.py +0 -0
  347. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_job.py +0 -0
  348. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_local.py +0 -0
  349. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_logger.py +0 -0
  350. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_ping.py +0 -0
  351. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_progress.py +0 -0
  352. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_scale.py +0 -0
  353. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_state.py +0 -0
  354. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_modules/test_tips.py +0 -0
  355. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_prestart.py +0 -0
  356. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_prestart_lifecycle.py +0 -0
  357. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_scale_mirror.py +0 -0
  358. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/__init__.py +0 -0
  359. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_cleanup.py +0 -0
  360. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_cuda.py +0 -0
  361. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_download.py +0 -0
  362. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_model_cache.py +0 -0
  363. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_ssrf.py +0 -0
  364. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_upload.py +0 -0
  365. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils/test_validate.py +0 -0
  366. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_serverless/test_utils_init.py +0 -0
  367. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_shared/__init__.py +0 -0
  368. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_shared/test_auth.py +0 -0
  369. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_user_agent.py +0 -0
  370. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_version.py +0 -0
  371. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/test_whatever.py +0 -0
  372. {runpod-2.0.0rc1 → runpod-2.0.1.dev1}/tests/whatever.py +0 -0
@@ -28,7 +28,7 @@ jobs:
28
28
 
29
29
  test-publish:
30
30
  if: github.ref == 'refs/heads/staging'
31
- runs-on: ubuntu-latest
31
+ runs-on: runpod-4vCPU-ubuntu-2404 # GitHub-hosted (trusted publishing needs that) with allow-listed static IPs
32
32
  environment: test-release
33
33
  permissions:
34
34
  contents: read
@@ -58,7 +58,7 @@ jobs:
58
58
 
59
59
  release-please:
60
60
  if: github.ref == 'refs/heads/main'
61
- runs-on: ubuntu-latest
61
+ runs-on: blacksmith-2vcpu-ubuntu-2404
62
62
  outputs:
63
63
  release_created: ${{ steps.release.outputs.release_created }}
64
64
  tag_name: ${{ steps.release.outputs.tag_name }}
@@ -74,7 +74,7 @@ jobs:
74
74
  name: PyPI Publish
75
75
  needs: release-please
76
76
  if: ${{ always() && (needs.release-please.outputs.release_created || (github.event_name == 'workflow_dispatch' && inputs.force_publish == 'true')) }}
77
- runs-on: ubuntu-latest
77
+ runs-on: runpod-4vCPU-ubuntu-2404 # GitHub-hosted (trusted publishing needs that) with allow-listed static IPs
78
78
  environment:
79
79
  name: pypi-production
80
80
  url: https://pypi.org/project/runpod/
@@ -109,7 +109,7 @@ jobs:
109
109
  linear-sync:
110
110
  name: Linear Release Sync
111
111
  needs: release-please
112
- runs-on: ubuntu-latest
112
+ runs-on: blacksmith-2vcpu-ubuntu-2404
113
113
  permissions:
114
114
  contents: read
115
115
  steps:
@@ -128,7 +128,7 @@ jobs:
128
128
  name: Linear Release Complete
129
129
  if: ${{ needs.release-please.outputs.release_created }}
130
130
  needs: [release-please, linear-sync]
131
- runs-on: ubuntu-latest
131
+ runs-on: blacksmith-2vcpu-ubuntu-2404
132
132
  permissions:
133
133
  contents: read
134
134
  steps:
@@ -148,7 +148,7 @@ jobs:
148
148
  # name: Notify workers
149
149
  # needs: [release-please, pypi-publish]
150
150
  # if: ${{ needs.release-please.outputs.release_created || (github.event_name == 'workflow_dispatch' && inputs.force_publish == 'true') }}
151
- # runs-on: ubuntu-latest
151
+ # runs-on: blacksmith-2vcpu-ubuntu-2404
152
152
  # strategy:
153
153
  # matrix:
154
154
  # repo:
@@ -19,7 +19,7 @@ jobs:
19
19
 
20
20
  test:
21
21
  if: github.event_name != 'schedule'
22
- runs-on: ubuntu-latest
22
+ runs-on: blacksmith-2vcpu-ubuntu-2404
23
23
  strategy:
24
24
  matrix:
25
25
  python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
@@ -57,7 +57,7 @@ jobs:
57
57
 
58
58
  e2e:
59
59
  if: github.event_name != 'schedule' && github.repository == 'runpod/runpod-python'
60
- runs-on: ubuntu-latest
60
+ runs-on: blacksmith-2vcpu-ubuntu-2404
61
61
  timeout-minutes: 15
62
62
  steps:
63
63
  - uses: actions/checkout@v7
@@ -82,12 +82,15 @@ jobs:
82
82
  source .venv/bin/activate
83
83
  pytest tests/e2e/ -v -p no:xdist --timeout=600 --reruns 1 --reruns-delay 5 --log-cli-level=INFO -o "addopts="
84
84
  env:
85
+ # the e2e provisioner still drives runpod-flash, whose import-time
86
+ # sunset FutureWarning is an error under pytest.ini filterwarnings
87
+ RUNPOD_FLASH_SILENCE_DEPRECATION: "1"
85
88
  RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }}
86
89
  RUNPOD_SDK_GIT_REF: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
87
90
 
88
91
  codeql:
89
92
  if: github.event_name == 'schedule' || github.event_name == 'pull_request'
90
- runs-on: ubuntu-latest
93
+ runs-on: blacksmith-2vcpu-ubuntu-2404
91
94
  permissions:
92
95
  actions: read
93
96
  contents: read
@@ -96,16 +99,16 @@ jobs:
96
99
  - uses: actions/checkout@v7
97
100
 
98
101
  - name: Initialize CodeQL
99
- uses: github/codeql-action/init@v4.38.1
102
+ uses: github/codeql-action/init@v4.39.1
100
103
  with:
101
104
  languages: python
102
105
  queries: security-extended,security-and-quality
103
106
 
104
107
  - name: Autobuild
105
- uses: github/codeql-action/autobuild@v4.38.1
108
+ uses: github/codeql-action/autobuild@v4.39.1
106
109
 
107
110
  - name: Perform CodeQL Analysis
108
- uses: github/codeql-action/analyze@v4.38.1
111
+ uses: github/codeql-action/analyze@v4.39.1
109
112
  with:
110
113
  category: "/language:python"
111
114
 
@@ -114,7 +117,7 @@ jobs:
114
117
  # ──────────────────────────────────────────────
115
118
 
116
119
  validation:
117
- runs-on: ubuntu-latest
120
+ runs-on: blacksmith-2vcpu-ubuntu-2404
118
121
  needs: [test, e2e, codeql]
119
122
  if: always()
120
123
  steps:
@@ -8,7 +8,7 @@ on:
8
8
 
9
9
  jobs:
10
10
  vhs:
11
- runs-on: ubuntu-latest
11
+ runs-on: blacksmith-2vcpu-ubuntu-2404
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
14
 
@@ -14,6 +14,31 @@
14
14
  * Deployment artifacts apply project ignore rules and mandatory secret-file exclusions while preserving vendored dependency assets.
15
15
  * Synchronous calls wait across polling timeouts on Python 3.10 and propagate operation timeouts.
16
16
 
17
+ ## [2.1.0](https://github.com/runpod/runpod-python/compare/v2.0.0...v2.1.0) (2026-10-28)
18
+
19
+
20
+ ### Features
21
+
22
+ * add rp catalog for gpu and cpu pricing and stock ([#637](https://github.com/runpod/runpod-python/issues/637)) ([9540b8a](https://github.com/runpod/runpod-python/commit/9540b8afff98b83e33146c4c0c03d6fa07157f62))
23
+ * add rp endpoint command group ([#640](https://github.com/runpod/runpod-python/issues/640)) ([be3f76b](https://github.com/runpod/runpod-python/commit/be3f76b4ade25eb62fcce41ffcd0d50088f8ef31))
24
+ * add rp pod lifecycle commands ([#639](https://github.com/runpod/runpod-python/issues/639)) ([eeffe2a](https://github.com/runpod/runpod-python/commit/eeffe2ae4651eab0fb4250580457d002882cfe7f))
25
+ * add rp volume commands for network and global volumes ([#638](https://github.com/runpod/runpod-python/issues/638)) ([598cb88](https://github.com/runpod/runpod-python/commit/598cb88b2eb00497916a8fa6117064c898d3d884))
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **apps:** bind volume mounts from RUNPOD_MOUNTS when the runtime did not ([#626](https://github.com/runpod/runpod-python/issues/626)) ([fc4a6c7](https://github.com/runpod/runpod-python/commit/fc4a6c73c3915625d65df63416db835d0b927b8f))
31
+ * **apps:** keep transitive torch out of GPU artifacts ([#623](https://github.com/runpod/runpod-python/issues/623)) ([25515f0](https://github.com/runpod/runpod-python/commit/25515f02a2e3ea36035c856e564106ccb8760b7f))
32
+ * **apps:** pin requested gpu devices instead of their whole pool ([#624](https://github.com/runpod/runpod-python/issues/624)) ([432c55b](https://github.com/runpod/runpod-python/commit/432c55b8a24b5bccbe37955392f9e1a72bad475e))
33
+ * **cli:** delete dev endpoints when rp flash dev is stopped by a signal ([#625](https://github.com/runpod/runpod-python/issues/625)) ([f866ec3](https://github.com/runpod/runpod-python/commit/f866ec3d2117b697a2534286509674657f37511f))
34
+ * **deps:** pin certifi to >=2026.10.19 for emSign bundle remediation (GHSA-6q48-6c7w-9gw2) ([#659](https://github.com/runpod/runpod-python/issues/659)) ([714a565](https://github.com/runpod/runpod-python/commit/714a565514bae7dd2b6ca355b52e8e76d70d1102))
35
+
36
+
37
+ ### Performance Improvements
38
+
39
+ * **serverless:** range-parallel VolumeCache hydrate ([#621](https://github.com/runpod/runpod-python/issues/621)) ([29704a4](https://github.com/runpod/runpod-python/commit/29704a49ab591eaca9a83d7d2eef935d9d787eb2))
40
+ * **serverless:** take a full batch once drained ([#646](https://github.com/runpod/runpod-python/issues/646)) ([397c37d](https://github.com/runpod/runpod-python/commit/397c37d3d2a04aaa2eb3c8a83cdc359e230bcb6e))
41
+
17
42
  ## [1.12.0](https://github.com/runpod/runpod-python/compare/v1.11.0...v1.12.0) (2026-08-10)
18
43
 
19
44
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runpod
3
- Version: 2.0.0rc1
3
+ Version: 2.0.1.dev1
4
4
  Summary: 🐍 | Python library for Runpod API and serverless worker SDK.
5
5
  Home-page: https://runpod.io
6
6
  Author: Runpod
@@ -28,25 +28,27 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
28
28
  Requires-Python: >=3.10
29
29
  Description-Content-Type: text/markdown
30
30
  License-File: LICENSE
31
- Requires-Dist: aiohttp[speedups]>=3.14.3
31
+ Requires-Dist: aiohttp[speedups]>=3.14.5
32
32
  Requires-Dist: aiohttp-retry>=2.9.1
33
33
  Requires-Dist: backoff>=2.2.1
34
- Requires-Dist: boto3>=1.43.97
34
+ Requires-Dist: boto3>=1.43.118
35
+ Requires-Dist: certifi>=2026.10.19
35
36
  Requires-Dist: click>=8.5.0
36
- Requires-Dist: cloudpickle>=3.0.0
37
+ Requires-Dist: cloudpickle>=3.1.2
37
38
  Requires-Dist: colorama<0.4.7,>=0.4.6
38
- Requires-Dist: cryptography>=50.0.1
39
- Requires-Dist: fastapi[all]>=0.141.1
40
- Requires-Dist: paramiko>=5.0.0
41
- Requires-Dist: pathspec>=0.12.1
39
+ Requires-Dist: cryptography>=50.0.2
40
+ Requires-Dist: fastapi[all]>=0.162.0
41
+ Requires-Dist: packaging>=26.3
42
+ Requires-Dist: paramiko>=5.1.0
43
+ Requires-Dist: pathspec>=1.1.1
42
44
  Requires-Dist: prettytable>=3.18.0
43
45
  Requires-Dist: psutil>=7.2.2
44
46
  Requires-Dist: py-cpuinfo>=9.0.0
45
47
  Requires-Dist: inquirerpy==0.3.4
46
48
  Requires-Dist: requests>=2.34.2
47
- Requires-Dist: rich>=13.0.0
48
- Requires-Dist: tomli>=2.4.1
49
- Requires-Dist: tomlkit>=0.15.1
49
+ Requires-Dist: rich>=15.0.0
50
+ Requires-Dist: tomli>=2.5.0
51
+ Requires-Dist: tomlkit>=0.15.2
50
52
  Requires-Dist: tqdm-loggable>=0.4.1
51
53
  Requires-Dist: urllib3>=2.8.0
52
54
  Requires-Dist: watchdog>=6.0.0
@@ -70,6 +72,10 @@ Dynamic: requires-python
70
72
 
71
73
  </div>
72
74
 
75
+ <!-- runpod-agent-setup:start -->
76
+ **Using an AI agent?** Point it to https://docs.runpod.io/agent-setup.md to install the Runpod skills and MCP server.
77
+ <!-- runpod-agent-setup:end -->
78
+
73
79
  ## Installation
74
80
 
75
81
  ```bash
@@ -13,6 +13,10 @@
13
13
 
14
14
  </div>
15
15
 
16
+ <!-- runpod-agent-setup:start -->
17
+ **Using an AI agent?** Point it to https://docs.runpod.io/agent-setup.md to install the Runpod skills and MCP server.
18
+ <!-- runpod-agent-setup:end -->
19
+
16
20
  ## Installation
17
21
 
18
22
  ```bash
@@ -59,7 +59,9 @@ vc.sync(background=False) # persist new files back to the volume, inli
59
59
  | `namespace` | `RUNPOD_ENDPOINT_ID` | Isolation key for the on-volume mirror. Must be a single safe path component. |
60
60
  | `volume_path` | `/runpod-volume` | Network-volume mount point. |
61
61
  | `best_effort` | `True` | Swallow and log errors instead of raising. Set `False` while debugging. |
62
- | `max_workers` | `min(32, (os.cpu_count() or 4) * 4)` | Thread count for parallel copy of large files (I/O-bound). |
62
+ | `max_workers` | `min(32, (os.cpu_count() or 4) * 4)` | Thread count for parallel copy of large files on sync (I/O-bound). |
63
+ | `hydrate_workers` | `max_workers` if set, else `64` | Concurrent range reads when hydrating large files. |
64
+ | `hydrate_chunk_size` | `8 MiB` | Bytes per hydrate range. Peak hydrate memory is about `hydrate_workers * hydrate_chunk_size` (512 MiB by default). |
63
65
 
64
66
  ## How it works
65
67
 
@@ -77,9 +79,25 @@ vc.sync(background=False) # persist new files back to the volume, inli
77
79
  files are skipped. The `small.tar` archive is re-packed as a whole whenever
78
80
  any small file has changed, since unpacking and re-diffing many tiny files
79
81
  individually is slower than the network volume's per-file overhead.
80
- - **Parallel copy.** Large-file transfers run across a thread pool sized by
81
- `max_workers` (default `min(32, (os.cpu_count() or 4) * 4)`), since the
82
- work is I/O-bound.
82
+ - **Parallel copy.** On sync, large files are copied whole across a thread
83
+ pool sized by `max_workers` (default `min(32, (os.cpu_count() or 4) * 4)`),
84
+ since the work is I/O-bound.
85
+ - **Range-parallel hydrate.** On hydrate, every large file is split into
86
+ `hydrate_chunk_size` ranges, and one pool of `hydrate_workers` threads reads
87
+ the ranges of all files at once, each on its own file descriptor.
88
+ Object-store mounts such as Global Store serve one sequential stream at
89
+ roughly 140 MiB/s, and reading several whole files at once doesn't add up,
90
+ but independent range reads scale to the host's network (~1.1 GiB/s
91
+ measured). Transient `ENOMEM`/`EIO`/`EAGAIN` errors, which such mounts
92
+ return under load, are retried with jittered exponential backoff. A file is assembled in a temp
93
+ file and renamed into place only when every range has copied, so a failed
94
+ file leaves any existing local copy untouched and is simply not restored.
95
+ A mirror file whose size differs from the manifest, or whose size or mtime
96
+ changes between ranges because a concurrent `sync()` replaced it, is
97
+ likewise not restored. This is a best-effort check: an object-store mount
98
+ can serve a replacement that lands in the middle of a single range read
99
+ without it being visible. Keep `hydrate_workers * hydrate_chunk_size` near the default: past ~1 GiB in
100
+ flight, Global Store starts failing reads with `ENOMEM`.
83
101
  - **Packing/extraction.** Packing the small-file archive uses the `tar`
84
102
  binary when available (falling back to the stdlib `tarfile` module
85
103
  otherwise). Extraction always goes through `tarfile`, validating every
@@ -13,6 +13,7 @@ filterwarnings =
13
13
  python_files = tests.py test_*.py *_test.py
14
14
  norecursedirs = venv *.egg-info .git build tests/e2e
15
15
  asyncio_mode = auto
16
+ asyncio_default_fixture_loop_scope = function
16
17
  markers =
17
18
  qb: Queue-based tests (local execution, fast)
18
19
  lb: Load-balanced tests (remote provisioning, slow)
@@ -1,23 +1,25 @@
1
- aiohttp[speedups] >= 3.14.3
1
+ aiohttp[speedups] >= 3.14.5
2
2
  aiohttp-retry >= 2.9.1
3
3
 
4
4
  backoff >= 2.2.1
5
- boto3 >= 1.43.97
5
+ boto3 >= 1.43.118
6
+ certifi >= 2026.10.19
6
7
  click >= 8.5.0
7
- cloudpickle >= 3.0.0
8
+ cloudpickle >= 3.1.2
8
9
  colorama >= 0.4.6, < 0.4.7
9
- cryptography >= 50.0.1
10
- fastapi[all] >= 0.141.1
11
- paramiko >= 5.0.0
12
- pathspec >= 0.12.1
10
+ cryptography >= 50.0.2
11
+ fastapi[all] >= 0.162.0
12
+ packaging >= 26.3
13
+ paramiko >= 5.1.0
14
+ pathspec >= 1.1.1
13
15
  prettytable >= 3.18.0
14
16
  psutil >= 7.2.2
15
17
  py-cpuinfo >= 9.0.0
16
18
  inquirerpy == 0.3.4
17
19
  requests >= 2.34.2
18
- rich >= 13.0.0
19
- tomli >= 2.4.1
20
- tomlkit >= 0.15.1
20
+ rich >= 15.0.0
21
+ tomli >= 2.5.0
22
+ tomlkit >= 0.15.2
21
23
  tqdm-loggable >= 0.4.1
22
24
  urllib3 >= 2.8.0
23
25
  watchdog >= 6.0.0
@@ -28,6 +28,13 @@ FALLBACK_TIMEOUT_SECONDS = 10
28
28
  MAX_ERROR_MESSAGES = 10
29
29
 
30
30
 
31
+ class GpuAllocationError(RuntimeError):
32
+ """gpu_test reached the GPUs and a device failed its allocation test.
33
+
34
+ The nvidia-smi fallback only lists GPUs, so it must not override this.
35
+ """
36
+
37
+
31
38
  def configure() -> None:
32
39
  """Read current fitness settings; setup errors are handled by the runner."""
33
40
  global TIMEOUT_SECONDS, MAX_ERROR_MESSAGES
@@ -161,6 +168,10 @@ async def _run_gpu_test_binary() -> dict[str, Any]:
161
168
  error_msg = "GPU memory allocation test failed"
162
169
  if result["errors"]:
163
170
  error_msg += f": {'; '.join(result['errors'][:MAX_ERROR_MESSAGES])}"
171
+ # Without "Found N GPUs" the binary never reached the devices
172
+ # (NVML or loader failure), so nvidia-smi may still decide.
173
+ if result["found_gpus"]:
174
+ raise GpuAllocationError(error_msg)
164
175
  raise RuntimeError(error_msg)
165
176
 
166
177
  log.info(
@@ -176,9 +187,7 @@ async def _run_gpu_test_binary() -> dict[str, Any]:
176
187
  raise RuntimeError(
177
188
  f"GPU test binary timed out after {TIMEOUT_SECONDS}s"
178
189
  ) from None
179
- except FileNotFoundError:
180
- raise
181
- except PermissionError:
190
+ except (FileNotFoundError, PermissionError, GpuAllocationError):
182
191
  raise
183
192
  except Exception as exc:
184
193
  raise RuntimeError(f"GPU test binary execution failed: {exc}") from exc
@@ -238,8 +247,9 @@ async def _check_gpu_health() -> None:
238
247
 
239
248
  Execution strategy:
240
249
  1. Try binary test if available
241
- 2. Fall back to Python check if binary fails/missing
242
- 3. Raise RuntimeError if all methods fail
250
+ 2. Fail if the binary reports a GPU allocation failure
251
+ 3. Otherwise fall back to Python check if binary fails/missing
252
+ 4. Raise RuntimeError if all methods fail
243
253
 
244
254
  Raises:
245
255
  RuntimeError: If GPU health check fails
@@ -251,6 +261,8 @@ async def _check_gpu_health() -> None:
251
261
  try:
252
262
  await _run_gpu_test_binary()
253
263
  return # Success!
264
+ except GpuAllocationError:
265
+ raise
254
266
  except FileNotFoundError as exc:
255
267
  log.debug(f"GPU binary not found: {exc}")
256
268
  binary_error = exc
@@ -17,6 +17,7 @@ import asyncio
17
17
  import os
18
18
  import re
19
19
  import shutil
20
+ import sys
20
21
  import time
21
22
  from urllib.parse import urlsplit
22
23
 
@@ -39,6 +40,47 @@ GPU_BENCHMARK_TIMEOUT = 2
39
40
  CUDA_VERSION_PROBE_TIMEOUT = 5
40
41
 
41
42
 
43
+ GPU_FRAMEWORKS = ("torch", "cupy")
44
+
45
+
46
+ def _loaded_module(name: str):
47
+ """
48
+ Return a module the handler has already imported, without importing it.
49
+
50
+ Importing torch costs ~1.5s on a cold worker. The torch and CuPy checks
51
+ reuse whatever the handler loaded; a framework it has not loaded is
52
+ treated as unavailable, and the gpu_test binary still verifies the GPU.
53
+
54
+ Raises:
55
+ ImportError: If the handler has not imported the module.
56
+ """
57
+ module = sys.modules.get(name)
58
+ if module is None:
59
+ raise ImportError(f"{name} not loaded by the handler")
60
+ return module
61
+
62
+
63
+ def _handler_loaded_gpu_framework() -> bool:
64
+ """True if the handler has imported torch or CuPy."""
65
+ return any(sys.modules.get(name) is not None for name in GPU_FRAMEWORKS)
66
+
67
+
68
+ def _torch_without_cuda_context(torch) -> bool:
69
+ """
70
+ True if the handler imported torch but has not created a CUDA context.
71
+
72
+ The torch checks must never be the first to initialize CUDA in the handler
73
+ process. An engine built in this process afterwards (vLLM's in-process
74
+ AsyncLLM/LLM) sees "CUDA is initialized" and spawns its workers instead of
75
+ forking, re-importing the engine and torch in every child (10.6-11.5 s per
76
+ cold start measured with vLLM v0.30.0). This gate runs before
77
+ torch.cuda.is_available(), whose default cudaGetDeviceCount path also
78
+ initializes the driver and poisons later forks. When the handler has
79
+ already created a context the checks cost nothing extra.
80
+ """
81
+ return not torch.cuda.is_initialized()
82
+
83
+
42
84
  def configure() -> None:
43
85
  """Read current fitness settings; setup errors are handled by the runner."""
44
86
  global \
@@ -347,11 +389,19 @@ async def _check_cuda_initialization() -> None:
347
389
 
348
390
  Tests actual device initialization, memory access, and device properties.
349
391
  This catches issues where CUDA appears available but fails at runtime.
350
- Skips silently on CPU-only workers.
392
+ Skips silently on CPU-only workers and when the handler has not
393
+ imported PyTorch or CuPy.
351
394
 
352
395
  Raises:
353
396
  RuntimeError: If CUDA initialization or device access fails
354
397
  """
398
+ if not _handler_loaded_gpu_framework():
399
+ log.debug(
400
+ "Handler has not loaded PyTorch or CuPy, skipping CUDA initialization "
401
+ "check (the gpu_test binary covers device allocation)"
402
+ )
403
+ return
404
+
355
405
  # Skip on CPU-only workers
356
406
  if not gpu_available():
357
407
  log.debug("No GPU detected, skipping CUDA initialization check")
@@ -359,7 +409,15 @@ async def _check_cuda_initialization() -> None:
359
409
 
360
410
  # Try PyTorch first (most common)
361
411
  try:
362
- import torch
412
+ torch = _loaded_module("torch")
413
+
414
+ if _torch_without_cuda_context(torch):
415
+ log.debug(
416
+ "Handler has not created a CUDA context, skipping CUDA initialization "
417
+ "check so the engine can still fork (the gpu_test binary, where it "
418
+ "runs, covers device allocation)"
419
+ )
420
+ return
363
421
 
364
422
  if not torch.cuda.is_available():
365
423
  log.debug("CUDA not available in PyTorch, skipping initialization check")
@@ -403,7 +461,7 @@ async def _check_cuda_initialization() -> None:
403
461
 
404
462
  # Fallback: try CuPy
405
463
  try:
406
- import cupy as cp
464
+ cp = _loaded_module("cupy")
407
465
 
408
466
  # Reset CuPy state
409
467
  cp.cuda.Device().synchronize()
@@ -441,11 +499,18 @@ async def _check_gpu_compute_benchmark() -> None:
441
499
  Quick GPU compute benchmark using matrix multiplication.
442
500
 
443
501
  Tests basic tensor operations to ensure GPU is functional and responsive.
444
- Skips silently on CPU-only workers.
502
+ Skips silently on CPU-only workers and when the handler has not
503
+ imported PyTorch or CuPy.
445
504
 
446
505
  Raises:
447
506
  RuntimeError: If GPU compute fails or is too slow
448
507
  """
508
+ if not _handler_loaded_gpu_framework():
509
+ log.debug(
510
+ "Handler has not loaded PyTorch or CuPy, skipping GPU compute benchmark"
511
+ )
512
+ return
513
+
449
514
  # Skip on CPU-only workers
450
515
  if not gpu_available():
451
516
  log.debug("No GPU detected, skipping GPU compute benchmark")
@@ -453,7 +518,14 @@ async def _check_gpu_compute_benchmark() -> None:
453
518
 
454
519
  # Try PyTorch first
455
520
  try:
456
- import torch
521
+ torch = _loaded_module("torch")
522
+
523
+ if _torch_without_cuda_context(torch):
524
+ log.debug(
525
+ "Handler has not created a CUDA context, skipping GPU compute "
526
+ "benchmark so the engine can still fork"
527
+ )
528
+ return
457
529
 
458
530
  if not torch.cuda.is_available():
459
531
  log.debug("CUDA not available in PyTorch, skipping benchmark")
@@ -492,7 +564,7 @@ async def _check_gpu_compute_benchmark() -> None:
492
564
 
493
565
  # Fallback: try CuPy
494
566
  try:
495
- import cupy as cp
567
+ cp = _loaded_module("cupy")
496
568
 
497
569
  size = 1024
498
570
  start_time = time.perf_counter()
@@ -536,9 +608,11 @@ def auto_register_system_checks() -> None:
536
608
  Registers memory, disk, and network checks for all workers.
537
609
  Registers CUDA version, initialization, and GPU benchmark checks only if GPU is detected.
538
610
 
539
- The two checks that import torch and allocate on the device are marked
611
+ The two checks that use torch and allocate on the device are marked
540
612
  @defer_to_worker_start so the import-time pass cannot create a CUDA context
541
- before the handler module runs.
613
+ before the handler module runs. They only use a framework the handler has
614
+ already imported, and only run when the handler has already created a CUDA
615
+ context, so they never add a torch import or a CUDA context to cold start.
542
616
  """
543
617
  configure()
544
618
  log.debug("Registering system resource fitness checks")
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.0.0rc1'
22
- __version_tuple__ = version_tuple = (2, 0, 0, 'rc1')
21
+ __version__ = version = '2.0.1.dev1'
22
+ __version_tuple__ = version_tuple = (2, 0, 1, 'dev1')
23
23
 
24
- __commit_id__ = commit_id = 'g3864d374c'
24
+ __commit_id__ = commit_id = 'ga4ba07898'
@@ -1,11 +1,5 @@
1
1
  """GraphQL mutations for capabilities absent from the resource REST API."""
2
2
 
3
- MUTATION_CREATE_GLOBAL_VOLUME = """
4
- mutation createGlobalVolume($input: GlobalStoreBucketCreateInput!) {
5
- globalStoreBucketCreate(input: $input) { id name }
6
- }
7
- """
8
-
9
3
  # endpoint saves retain flash bindings, cached models, and schedules atomically.
10
4
  MUTATION_SAVE_ENDPOINT = """
11
5
  mutation saveEndpoint($input: EndpointInput!) {
@@ -1,13 +1,5 @@
1
1
  """GraphQL queries for capabilities absent from the resource REST API."""
2
2
 
3
- QUERY_GLOBAL_VOLUMES = """
4
- query myGlobalVolumes {
5
- myself {
6
- globalStoreBuckets { id name }
7
- }
8
- }
9
- """
10
-
11
3
  # rest stock filters require a power-of-two count of at least two.
12
4
  QUERY_CPU_STOCK = """
13
5
  query CpuStock($cpuFlavorInput: CpuFlavorInput, $specificsInput: SpecificsInput) {