skypilot-nightly 1.0.0.dev20250828__tar.gz → 1.0.0.dev20250829__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (571) hide show
  1. {skypilot_nightly-1.0.0.dev20250828/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250829}/PKG-INFO +8 -2
  2. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/backend_utils.py +130 -40
  4. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/cloud_vm_ray_backend.py +19 -3
  5. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/wheel_utils.py +35 -8
  6. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/aws.py +118 -1
  7. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/404.html +1 -1
  8. skypilot_nightly-1.0.0.dev20250828/sky/dashboard/out/_next/static/chunks/webpack-6dae1cd599a34def.js → skypilot_nightly-1.0.0.dev20250829/sky/dashboard/out/_next/static/chunks/webpack-6e76f636a048e145.js +1 -1
  9. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  10. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/clusters/[cluster].html +1 -1
  11. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/clusters.html +1 -1
  12. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/config.html +1 -1
  13. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/index.html +1 -1
  14. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/infra/[context].html +1 -1
  15. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/infra.html +1 -1
  16. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/jobs/[job].html +1 -1
  17. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/jobs/pools/[pool].html +1 -1
  18. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/jobs.html +1 -1
  19. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/users.html +1 -1
  20. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/volumes.html +1 -1
  21. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/workspace/new.html +1 -1
  22. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/workspaces/[name].html +1 -1
  23. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/workspaces.html +1 -1
  24. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/global_user_state.py +58 -10
  25. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/server/server.py +2 -1
  26. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/aws/config.py +78 -3
  27. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/aws/instance.py +45 -6
  28. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/utils.py +9 -0
  29. skypilot_nightly-1.0.0.dev20250829/sky/schemas/db/global_user_state/007_cluster_event_request_id.py +34 -0
  30. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/server/server.py +2 -1
  31. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/common.py +1 -2
  32. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/daemons.py +6 -0
  33. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/executor.py +3 -2
  34. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/payloads.py +3 -1
  35. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/preconditions.py +3 -2
  36. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/requests.py +110 -29
  37. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/server.py +70 -61
  38. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/stream_utils.py +7 -5
  39. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/setup_files/dependencies.py +6 -1
  40. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/sky_logging.py +28 -0
  41. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/constants.py +6 -0
  42. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/aws-ray.yml.j2 +1 -0
  43. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/annotations.py +8 -2
  44. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/cluster_utils.py +3 -3
  45. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/db/db_utils.py +11 -0
  46. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/db/migration_utils.py +1 -1
  47. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes_enums.py +1 -0
  48. skypilot_nightly-1.0.0.dev20250829/sky/utils/lock_events.py +94 -0
  49. skypilot_nightly-1.0.0.dev20250829/sky/utils/timeline.py +110 -0
  50. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829/skypilot_nightly.egg-info}/PKG-INFO +8 -2
  51. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/skypilot_nightly.egg-info/SOURCES.txt +5 -3
  52. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/skypilot_nightly.egg-info/requires.txt +7 -1
  53. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_api.py +6 -6
  54. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_failover.py +8 -3
  55. skypilot_nightly-1.0.0.dev20250829/tests/test_wheels.py +172 -0
  56. skypilot_nightly-1.0.0.dev20250828/sky/utils/timeline.py +0 -179
  57. skypilot_nightly-1.0.0.dev20250828/tests/test_wheels.py +0 -33
  58. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/LICENSE +0 -0
  59. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/MANIFEST.in +0 -0
  60. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/README.md +0 -0
  61. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/pyproject.toml +0 -0
  62. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/setup.cfg +0 -0
  63. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/setup.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/__init__.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/aws.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/azure.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/cloudflare.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/common.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/cudo.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/do.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/docker.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/gcp.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/hyperbolic.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/ibm.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/kubernetes.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/nebius.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/oci.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/runpod.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/vast.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/adaptors/vsphere.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/admin_policy.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/authentication.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/__init__.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/backend.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/docker_utils.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/local_docker_backend.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/__init__.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/aws_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/azure_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/common.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/config.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/cudo_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/__init__.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/analyze.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_aws.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_azure.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_cudo.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_fluidstack.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_gcp.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_hyperbolic.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_ibm.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_nebius.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_vast.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/data_fetchers/fetch_vsphere.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/do_catalog.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/fluidstack_catalog.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/gcp_catalog.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/hyperbolic_catalog.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/ibm_catalog.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/kubernetes_catalog.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/lambda_catalog.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/nebius_catalog.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/oci_catalog.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/paperspace_catalog.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/runpod_catalog.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/scp_catalog.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/ssh_catalog.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/vast_catalog.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/catalog/vsphere_catalog.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/check.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/cli.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/__init__.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/cli/__init__.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/cli/command.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/cli/deprecation_utils.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/cli/flags.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/cli/git.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/common.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/oauth.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/sdk.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/sdk_async.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/client/service_account_auth.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/cloud_stores.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/__init__.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/azure.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/cloud.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/cudo.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/do.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/fluidstack.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/gcp.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/hyperbolic.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/ibm.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/kubernetes.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/lambda_cloud.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/nebius.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/oci.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/paperspace.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/runpod.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/scp.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/ssh.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/utils/__init__.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/utils/aws_utils.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/utils/azure_utils.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/utils/gcp_utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/utils/oci_utils.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/utils/scp_utils.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/vast.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/clouds/vsphere.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/core.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dag.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/1121-8afcf719ea87debc.js +0 -0
  164. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/1141-943efc7aff0f0c06.js +0 -0
  165. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +0 -0
  166. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +0 -0
  167. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/3015-6c9c09593b1e67b6.js +0 -0
  168. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/3785.d5b86f6ebc88e6e6.js +0 -0
  169. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/3850-ff4a9a69d978632b.js +0 -0
  170. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/3937.210053269f121201.js +0 -0
  171. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/4045.b30465273dc5e468.js +0 -0
  172. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/4676-9da7fdbde90b5549.js +0 -0
  173. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/4725.10f7a9a5d3ea8208.js +0 -0
  174. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/4783.c485f48348349f47.js +0 -0
  175. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/5739-d67458fcb1386c92.js +0 -0
  176. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/6130-2be46d70a38f1e82.js +0 -0
  177. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/6135-4b4d5e824b7f9d3c.js +0 -0
  178. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/616-3d59f75e2ccf9321.js +0 -0
  179. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/6601-06114c982db410b6.js +0 -0
  180. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/6856-049014c6d43d127b.js +0 -0
  181. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/6989-01359c57e018caa4.js +0 -0
  182. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/7205-88191679e7988c57.js +0 -0
  184. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/7325.b4bc99ce0892dcd5.js +0 -0
  185. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js +0 -0
  186. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/754-d0da8ab45f9509e9.js +0 -0
  187. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/7669.1f5d9a402bf5cc42.js +0 -0
  188. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/8969-4a6f1a928fb6d370.js +0 -0
  189. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/9025.a1bef12d672bb66d.js +0 -0
  190. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/9037-89a84fd7fa31362d.js +0 -0
  191. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/9946.3b7b43c217ff70ec.js +0 -0
  192. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/9984.7eb6cc51fb460cae.js +0 -0
  193. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js +0 -0
  194. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js +0 -0
  195. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js +0 -0
  196. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js +0 -0
  197. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/_app-ce361c6959bc2001.js +0 -0
  198. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +0 -0
  199. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-06afb50d25f7c61f.js +0 -0
  200. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-a0527109c2fab467.js +0 -0
  201. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/clusters-469814d711d63b1b.js +0 -0
  202. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/config-dfb9bf07b13045f4.js +0 -0
  203. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/index-444f1804401f04ea.js +0 -0
  204. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-81351f95f3bec08e.js +0 -0
  205. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/infra-c320641c2bcbbea6.js +0 -0
  206. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-dd64309c3fe67ed2.js +0 -0
  207. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-07349868f7905d37.js +0 -0
  208. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js +0 -0
  209. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/users-018bf31cda52e11b.js +0 -0
  210. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/volumes-739726d6b823f532.js +0 -0
  211. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js +0 -0
  212. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-de06e613e20bc977.js +0 -0
  213. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/pages/workspaces-be35b22e2046564c.js +0 -0
  214. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  215. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/_next/static/css/4614e06482d7309e.css +0 -0
  216. {skypilot_nightly-1.0.0.dev20250828/sky/dashboard/out/_next/static/9DW6d9jaP2kZt0NcgIfFa → skypilot_nightly-1.0.0.dev20250829/sky/dashboard/out/_next/static/hYJYFIxp_ZFONR4wTIJqZ}/_buildManifest.js +0 -0
  217. {skypilot_nightly-1.0.0.dev20250828/sky/dashboard/out/_next/static/9DW6d9jaP2kZt0NcgIfFa → skypilot_nightly-1.0.0.dev20250829/sky/dashboard/out/_next/static/hYJYFIxp_ZFONR4wTIJqZ}/_ssgManifest.js +0 -0
  218. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/favicon.ico +0 -0
  219. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/skypilot.svg +0 -0
  220. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  221. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/data/__init__.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/data/data_transfer.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/data/data_utils.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/data/mounting_utils.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/data/storage.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/data/storage_utils.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/exceptions.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/execution.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/__init__.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/client/__init__.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/client/sdk.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/client/sdk_async.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/constants.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/controller.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/recovery_strategy.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/scheduler.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/server/__init__.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/server/core.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/server/utils.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/state.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/jobs/utils.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/logs/__init__.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/logs/agent.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/logs/aws.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/logs/gcp.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/metrics/__init__.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/metrics/utils.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/models.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/optimizer.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/__init__.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/aws/__init__.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/aws/utils.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/azure/__init__.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/azure/azure-config-template.json +0 -0
  255. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/azure/config.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/azure/instance.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/common.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/constants.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/cudo/__init__.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/cudo/config.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/cudo/cudo_machine_type.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/cudo/cudo_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/cudo/cudo_wrapper.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/cudo/instance.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/do/__init__.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/do/config.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/do/constants.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/do/instance.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/do/utils.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/docker_utils.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/fluidstack/__init__.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/fluidstack/config.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/fluidstack/instance.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/__init__.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/config.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/constants.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/instance.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/instance_utils.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/mig_utils.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/gcp/volume_utils.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/hyperbolic/__init__.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/hyperbolic/config.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/hyperbolic/instance.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/hyperbolic/utils.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/instance_setup.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/__init__.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/config.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/constants.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/instance.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  292. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/network.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/network_utils.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/kubernetes/volume.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/lambda_cloud/__init__.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/lambda_cloud/config.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/lambda_cloud/instance.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/logging.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/metadata_utils.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/nebius/__init__.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/nebius/config.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/nebius/constants.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/nebius/instance.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/nebius/utils.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/oci/__init__.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/oci/config.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/oci/instance.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/oci/query_utils.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/paperspace/__init__.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/paperspace/config.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/paperspace/constants.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/paperspace/instance.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/paperspace/utils.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/provisioner.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/__init__.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/api/__init__.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/api/commands.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/api/pods.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/config.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/instance.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/runpod/utils.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/scp/__init__.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/scp/config.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/scp/instance.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/ssh/__init__.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vast/__init__.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vast/config.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vast/instance.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vast/utils.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/__init__.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/__init__.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/custom_script.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/id_generator.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/service_manager.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/common/vim_utils.py +0 -0
  343. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/config.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/instance.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/provision/vsphere/vsphere_utils.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/py.typed +0 -0
  347. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/resources.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/__init__.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/api/__init__.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/api/responses.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/README +0 -0
  352. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/env.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/global_user_state/001_initial_schema.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/global_user_state/002_add_workspace_to_cluster_history.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/global_user_state/003_fix_initial_revision.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/global_user_state/004_is_managed.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/global_user_state/005_cluster_event.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/global_user_state/006_provision_log.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/script.py.mako +0 -0
  360. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/serve_state/001_initial_schema.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/spot_jobs/001_initial_schema.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/spot_jobs/002_cluster_pool.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/db/spot_jobs/003_pool_hash.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/generated/__init__.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/generated/autostopv1_pb2.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/generated/autostopv1_pb2.pyi +0 -0
  367. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/schemas/generated/autostopv1_pb2_grpc.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/__init__.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/autoscalers.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/client/__init__.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/client/impl.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/client/sdk.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/client/sdk_async.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/constants.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/controller.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/load_balancer.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/load_balancing_policies.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/replica_managers.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/serve_state.py +0 -0
  380. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/serve_utils.py +0 -0
  381. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/server/__init__.py +0 -0
  382. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/server/core.py +0 -0
  383. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/server/impl.py +0 -0
  384. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/service.py +0 -0
  385. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/service_spec.py +0 -0
  386. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/serve/spot_placer.py +0 -0
  387. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/__init__.py +0 -0
  388. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/auth/__init__.py +0 -0
  389. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/auth/authn.py +0 -0
  390. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/auth/oauth2_proxy.py +0 -0
  391. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/config.py +0 -0
  392. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/constants.py +0 -0
  393. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/html/log.html +0 -0
  394. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/html/token_page.html +0 -0
  395. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/metrics.py +0 -0
  396. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/__init__.py +0 -0
  397. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/event_loop.py +0 -0
  398. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/process.py +0 -0
  399. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/queues/__init__.py +0 -0
  400. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/queues/local_queue.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/queues/mp_queue.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/serializers/__init__.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/serializers/decoders.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/requests/serializers/encoders.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/rest.py +0 -0
  406. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/state.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/uvicorn.py +0 -0
  408. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/server/versions.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/setup_files/MANIFEST.in +0 -0
  410. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/setup_files/alembic.ini +0 -0
  411. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/setup_files/setup.py +0 -0
  412. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/LICENSE +0 -0
  413. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/__init__.py +0 -0
  414. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/attempt_skylet.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/autostop_lib.py +0 -0
  416. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/configs.py +0 -0
  417. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/events.py +0 -0
  418. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/job_lib.py +0 -0
  419. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/log_lib.py +0 -0
  420. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/log_lib.pyi +0 -0
  421. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/providers/__init__.py +0 -0
  422. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/providers/command_runner.py +0 -0
  423. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/providers/ibm/__init__.py +0 -0
  424. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/providers/ibm/node_provider.py +0 -0
  425. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/providers/ibm/utils.py +0 -0
  426. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  427. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/__init__.py +0 -0
  428. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/autoscaler.py.diff +0 -0
  429. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  430. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/cli.py.diff +0 -0
  431. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/cli.py.patch +0 -0
  432. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/command_runner.py.diff +0 -0
  433. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  434. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/log_monitor.py.diff +0 -0
  435. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  436. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/resource_demand_scheduler.py.diff +0 -0
  437. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  438. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/updater.py.diff +0 -0
  439. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/updater.py.patch +0 -0
  440. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/worker.py.diff +0 -0
  441. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/ray_patches/worker.py.patch +0 -0
  442. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/services.py +0 -0
  443. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/skylet.py +0 -0
  444. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skylet/subprocess_daemon.py +0 -0
  445. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/skypilot_config.py +0 -0
  446. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/ssh_node_pools/__init__.py +0 -0
  447. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/ssh_node_pools/core.py +0 -0
  448. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/ssh_node_pools/server.py +0 -0
  449. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/task.py +0 -0
  450. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/azure-ray.yml.j2 +0 -0
  451. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/cudo-ray.yml.j2 +0 -0
  452. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/do-ray.yml.j2 +0 -0
  453. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  454. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/gcp-ray.yml.j2 +0 -0
  455. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/hyperbolic-ray.yml.j2 +0 -0
  456. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/ibm-ray.yml.j2 +0 -0
  457. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/jobs-controller.yaml.j2 +0 -0
  458. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  459. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  460. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  461. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  462. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  463. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/lambda-ray.yml.j2 +0 -0
  464. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/local-ray.yml.j2 +0 -0
  465. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/nebius-ray.yml.j2 +0 -0
  466. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/oci-ray.yml.j2 +0 -0
  467. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/paperspace-ray.yml.j2 +0 -0
  468. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/runpod-ray.yml.j2 +0 -0
  469. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/scp-ray.yml.j2 +0 -0
  470. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  471. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  472. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/vast-ray.yml.j2 +0 -0
  473. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/vsphere-ray.yml.j2 +0 -0
  474. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/templates/websocket_proxy.py +0 -0
  475. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/usage/__init__.py +0 -0
  476. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/usage/constants.py +0 -0
  477. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/usage/usage_lib.py +0 -0
  478. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/users/__init__.py +0 -0
  479. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/users/model.conf +0 -0
  480. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/users/permission.py +0 -0
  481. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/users/rbac.py +0 -0
  482. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/users/server.py +0 -0
  483. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/users/token_service.py +0 -0
  484. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/__init__.py +0 -0
  485. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/accelerator_registry.py +0 -0
  486. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/admin_policy_utils.py +0 -0
  487. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/atomic.py +0 -0
  488. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/aws/__init__.py +0 -0
  489. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/aws/get_default_security_group.py +0 -0
  490. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/cli_utils/__init__.py +0 -0
  491. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/cli_utils/status_utils.py +0 -0
  492. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/command_runner.py +0 -0
  493. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/command_runner.pyi +0 -0
  494. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/common.py +0 -0
  495. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/common_utils.py +0 -0
  496. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/config_utils.py +0 -0
  497. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/context.py +0 -0
  498. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/context_utils.py +0 -0
  499. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/control_master_utils.py +0 -0
  500. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/controller_utils.py +0 -0
  501. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/dag_utils.py +0 -0
  502. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/db/__init__.py +0 -0
  503. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/directory_utils.py +0 -0
  504. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/env_options.py +0 -0
  505. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/git.py +0 -0
  506. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/git_clone.sh +0 -0
  507. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/infra_utils.py +0 -0
  508. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/__init__.py +0 -0
  509. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
  510. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/config_map_utils.py +0 -0
  511. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/create_cluster.sh +0 -0
  512. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  513. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/deploy_remote_cluster.py +0 -0
  514. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  515. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  516. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  517. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  518. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  519. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  520. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  521. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  522. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
  523. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  524. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/kubernetes/ssh_utils.py +0 -0
  525. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/locks.py +0 -0
  526. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/log_utils.py +0 -0
  527. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/message_utils.py +0 -0
  528. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/registry.py +0 -0
  529. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/resource_checker.py +0 -0
  530. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/resources_utils.py +0 -0
  531. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/rich_console_utils.py +0 -0
  532. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/rich_utils.py +0 -0
  533. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/schemas.py +0 -0
  534. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/serialize_utils.py +0 -0
  535. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/status_lib.py +0 -0
  536. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/subprocess_utils.py +0 -0
  537. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/tempstore.py +0 -0
  538. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/ux_utils.py +0 -0
  539. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/validator.py +0 -0
  540. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/volume.py +0 -0
  541. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/utils/yaml_utils.py +0 -0
  542. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/__init__.py +0 -0
  543. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/client/__init__.py +0 -0
  544. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/client/sdk.py +0 -0
  545. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/server/__init__.py +0 -0
  546. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/server/core.py +0 -0
  547. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/server/server.py +0 -0
  548. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/utils.py +0 -0
  549. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/volumes/volume.py +0 -0
  550. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/workspaces/__init__.py +0 -0
  551. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/workspaces/core.py +0 -0
  552. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/workspaces/server.py +0 -0
  553. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/sky/workspaces/utils.py +0 -0
  554. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  555. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  556. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/skypilot_nightly.egg-info/top_level.txt +0 -0
  557. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_api_compatibility.py +0 -0
  558. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_cli.py +0 -0
  559. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_config.py +0 -0
  560. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_db_utils.py +0 -0
  561. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_global_user_state.py +0 -0
  562. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_jobs.py +0 -0
  563. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_jobs_and_serve.py +0 -0
  564. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_list_accelerators.py +0 -0
  565. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_no_parellel.py +0 -0
  566. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_optimizer_dryruns.py +0 -0
  567. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_optimizer_random_dag.py +0 -0
  568. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_serve_autoscaler.py +0 -0
  569. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_smoke.py +0 -0
  570. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_storage.py +0 -0
  571. {skypilot_nightly-1.0.0.dev20250828 → skypilot_nightly-1.0.0.dev20250829}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250828
3
+ Version: 1.0.0.dev20250829
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -34,7 +34,7 @@ Requires-Dist: python-dotenv
34
34
  Requires-Dist: rich
35
35
  Requires-Dist: tabulate
36
36
  Requires-Dist: typing_extensions
37
- Requires-Dist: filelock>=3.6.0
37
+ Requires-Dist: filelock>=3.15.0
38
38
  Requires-Dist: packaging
39
39
  Requires-Dist: psutil
40
40
  Requires-Dist: pulp
@@ -59,6 +59,8 @@ Requires-Dist: gitpython
59
59
  Requires-Dist: types-paramiko
60
60
  Requires-Dist: alembic
61
61
  Requires-Dist: aiohttp
62
+ Requires-Dist: aiosqlite
63
+ Requires-Dist: anyio
62
64
  Provides-Extra: aws
63
65
  Requires-Dist: awscli>=1.27.10; extra == "aws"
64
66
  Requires-Dist: botocore>=1.29.10; extra == "aws"
@@ -136,8 +138,10 @@ Requires-Dist: sqlalchemy_adapter; extra == "server"
136
138
  Requires-Dist: passlib; extra == "server"
137
139
  Requires-Dist: pyjwt; extra == "server"
138
140
  Requires-Dist: aiohttp; extra == "server"
141
+ Requires-Dist: anyio; extra == "server"
139
142
  Requires-Dist: grpcio>=1.63.0; extra == "server"
140
143
  Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "server"
144
+ Requires-Dist: aiosqlite; extra == "server"
141
145
  Provides-Extra: all
142
146
  Requires-Dist: awscli>=1.27.10; extra == "all"
143
147
  Requires-Dist: botocore>=1.29.10; extra == "all"
@@ -194,8 +198,10 @@ Requires-Dist: sqlalchemy_adapter; extra == "all"
194
198
  Requires-Dist: passlib; extra == "all"
195
199
  Requires-Dist: pyjwt; extra == "all"
196
200
  Requires-Dist: aiohttp; extra == "all"
201
+ Requires-Dist: anyio; extra == "all"
197
202
  Requires-Dist: grpcio>=1.63.0; extra == "all"
198
203
  Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
204
+ Requires-Dist: aiosqlite; extra == "all"
199
205
  Dynamic: author
200
206
  Dynamic: classifier
201
207
  Dynamic: description
@@ -7,7 +7,7 @@ import urllib.request
7
7
  from sky.utils import directory_utils
8
8
 
9
9
  # Replaced with the current commit when building the wheels.
10
- _SKYPILOT_COMMIT_SHA = 'ff93214498e29e0aa9a73868b73613535f96b8a3'
10
+ _SKYPILOT_COMMIT_SHA = '27f74c78af59ef98180b59a30c43410e46e3ce37'
11
11
 
12
12
 
13
13
  def _get_git_commit():
@@ -37,7 +37,7 @@ def _get_git_commit():
37
37
 
38
38
 
39
39
  __commit__ = _get_git_commit()
40
- __version__ = '1.0.0.dev20250828'
40
+ __version__ = '1.0.0.dev20250829'
41
41
  __root_dir__ = directory_utils.get_sky_dir()
42
42
 
43
43
 
@@ -1409,6 +1409,62 @@ def ssh_credential_from_yaml(
1409
1409
  return credentials
1410
1410
 
1411
1411
 
1412
+ def ssh_credentials_from_handles(
1413
+ handles: List['cloud_vm_ray_backend.CloudVmRayResourceHandle'],
1414
+ ) -> List[Dict[str, Any]]:
1415
+ """Returns ssh_user, ssh_private_key and ssh_control name.
1416
+ """
1417
+ non_empty_cluster_yaml_paths = [
1418
+ handle.cluster_yaml
1419
+ for handle in handles
1420
+ if handle.cluster_yaml is not None
1421
+ ]
1422
+ cluster_yaml_dicts = global_user_state.get_cluster_yaml_dict_multiple(
1423
+ non_empty_cluster_yaml_paths)
1424
+ cluster_yaml_dicts_to_index = {
1425
+ cluster_yaml_path: cluster_yaml_dict
1426
+ for cluster_yaml_path, cluster_yaml_dict in zip(
1427
+ non_empty_cluster_yaml_paths, cluster_yaml_dicts)
1428
+ }
1429
+
1430
+ credentials_to_return: List[Dict[str, Any]] = []
1431
+ for handle in handles:
1432
+ if handle.cluster_yaml is None:
1433
+ credentials_to_return.append(dict())
1434
+ continue
1435
+ ssh_user = handle.ssh_user
1436
+ docker_user = handle.docker_user
1437
+ config = cluster_yaml_dicts_to_index[handle.cluster_yaml]
1438
+ auth_section = config['auth']
1439
+ if ssh_user is None:
1440
+ ssh_user = auth_section['ssh_user'].strip()
1441
+ ssh_private_key_path = auth_section.get('ssh_private_key')
1442
+ ssh_control_name = config.get('cluster_name', '__default__')
1443
+ ssh_proxy_command = auth_section.get('ssh_proxy_command')
1444
+
1445
+ # Update the ssh_user placeholder in proxy command, if required
1446
+ if (ssh_proxy_command is not None and
1447
+ constants.SKY_SSH_USER_PLACEHOLDER in ssh_proxy_command):
1448
+ ssh_proxy_command = ssh_proxy_command.replace(
1449
+ constants.SKY_SSH_USER_PLACEHOLDER, ssh_user)
1450
+
1451
+ credentials = {
1452
+ 'ssh_user': ssh_user,
1453
+ 'ssh_private_key': ssh_private_key_path,
1454
+ 'ssh_control_name': ssh_control_name,
1455
+ 'ssh_proxy_command': ssh_proxy_command,
1456
+ }
1457
+ if docker_user is not None:
1458
+ credentials['docker_user'] = docker_user
1459
+ ssh_provider_module = config['provider']['module']
1460
+ # If we are running ssh command on kubernetes node.
1461
+ if 'kubernetes' in ssh_provider_module:
1462
+ credentials['disable_control_master'] = True
1463
+ credentials_to_return.append(credentials)
1464
+
1465
+ return credentials_to_return
1466
+
1467
+
1412
1468
  def parallel_data_transfer_to_nodes(
1413
1469
  runners: List[command_runner.CommandRunner],
1414
1470
  source: Optional[str],
@@ -2056,7 +2112,10 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
2056
2112
  f'{output}\n', stderr)
2057
2113
  return (*_count_healthy_nodes_from_ray(output), output, stderr)
2058
2114
 
2115
+ ray_status_details: Optional[str] = None
2116
+
2059
2117
  def run_ray_status_to_check_ray_cluster_healthy() -> bool:
2118
+ nonlocal ray_status_details
2060
2119
  try:
2061
2120
  # NOTE: fetching the IPs is very slow as it calls into
2062
2121
  # `ray get head-ip/worker-ips`. Using cached IPs is safe because
@@ -2134,19 +2193,25 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
2134
2193
  # showing up
2135
2194
  time.sleep(1)
2136
2195
 
2196
+ ray_status_details = (
2197
+ f'{ready_head + ready_workers}/{total_nodes} ready')
2137
2198
  raise RuntimeError(
2138
2199
  f'Refreshing status ({cluster_name!r}): ray status not showing '
2139
2200
  f'all nodes ({ready_head + ready_workers}/'
2140
2201
  f'{total_nodes});\noutput:\n{output}\nstderr:\n{stderr}')
2141
2202
 
2142
2203
  except exceptions.FetchClusterInfoError:
2204
+ ray_status_details = 'failed to get IPs'
2143
2205
  logger.debug(
2144
2206
  f'Refreshing status ({cluster_name!r}) failed to get IPs.')
2145
2207
  except RuntimeError as e:
2208
+ if ray_status_details is None:
2209
+ ray_status_details = str(e)
2146
2210
  logger.debug(common_utils.format_exception(e))
2147
2211
  except Exception as e: # pylint: disable=broad-except
2148
2212
  # This can be raised by `external_ssh_ports()`, due to the
2149
2213
  # underlying call to kubernetes API.
2214
+ ray_status_details = str(e)
2150
2215
  logger.debug(f'Refreshing status ({cluster_name!r}) failed: ',
2151
2216
  exc_info=e)
2152
2217
  return False
@@ -2259,6 +2324,10 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
2259
2324
  # (2) Otherwise, we will reset the autostop setting, unless the cluster is
2260
2325
  # autostopping/autodowning.
2261
2326
  some_nodes_terminated = 0 < len(node_statuses) < handle.launched_nodes
2327
+ # If all nodes are up and ray cluster is health, we would have returned
2328
+ # earlier. So if all_nodes_up is True and we are here, it means the ray
2329
+ # cluster must have been unhealthy.
2330
+ ray_cluster_unhealthy = all_nodes_up
2262
2331
  some_nodes_not_stopped = any(status[0] != status_lib.ClusterStatus.STOPPED
2263
2332
  for status in node_statuses)
2264
2333
  is_abnormal = (some_nodes_terminated or some_nodes_not_stopped)
@@ -2269,8 +2338,10 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
2269
2338
 
2270
2339
  if some_nodes_terminated:
2271
2340
  init_reason = 'one or more nodes terminated'
2341
+ elif ray_cluster_unhealthy:
2342
+ init_reason = f'ray cluster is unhealthy ({ray_status_details})'
2272
2343
  elif some_nodes_not_stopped:
2273
- init_reason = 'some nodes are up and some nodes are stopped'
2344
+ init_reason = 'some but not all nodes are stopped'
2274
2345
  logger.debug('The cluster is abnormal. Setting to INIT status. '
2275
2346
  f'node_statuses: {node_statuses}')
2276
2347
  if record['autostop'] >= 0:
@@ -2365,7 +2436,8 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
2365
2436
  # Some status reason clears after a certain time (e.g. k8s events
2366
2437
  # are only stored for an hour by default), so it is possible that
2367
2438
  # the previous event has a status reason, but now it does not.
2368
- init_reason_regex = f'^Cluster is abnormal because {init_reason}.*'
2439
+ init_reason_regex = (f'^Cluster is abnormal because '
2440
+ f'{re.escape(init_reason)}.*')
2369
2441
  log_message = f'Cluster is abnormal because {init_reason}'
2370
2442
  if status_reason:
2371
2443
  log_message += f' ({status_reason})'
@@ -2385,10 +2457,17 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
2385
2457
  return global_user_state.get_cluster_from_name(cluster_name)
2386
2458
  # Now is_abnormal is False: either node_statuses is empty or all nodes are
2387
2459
  # STOPPED.
2460
+ verb = 'terminated' if to_terminate else 'stopped'
2388
2461
  backend = backends.CloudVmRayBackend()
2389
2462
  global_user_state.add_cluster_event(
2390
- cluster_name, None, 'All nodes terminated, cleaning up the cluster.',
2391
- global_user_state.ClusterEventType.STATUS_CHANGE)
2463
+ cluster_name,
2464
+ None,
2465
+ f'All nodes {verb}, cleaning up the cluster.',
2466
+ global_user_state.ClusterEventType.STATUS_CHANGE,
2467
+ # This won't do anything for a terminated cluster, but it's needed for a
2468
+ # stopped cluster.
2469
+ nop_if_duplicate=True,
2470
+ )
2392
2471
  backend.post_teardown_cleanup(handle, terminate=to_terminate, purge=False)
2393
2472
  return global_user_state.get_cluster_from_name(cluster_name)
2394
2473
 
@@ -2916,44 +2995,57 @@ def get_clusters(
2916
2995
  logger.info(f'Cluster(s) not found: {bright}{clusters_str}{reset}.')
2917
2996
  records = new_records
2918
2997
 
2919
- def _update_record_with_credentials_and_resources_str(
2920
- record: Optional[Dict[str, Any]]) -> None:
2998
+ def _update_records_with_credentials_and_resources_str(
2999
+ records: List[Optional[Dict[str, Any]]]) -> None:
2921
3000
  """Add the credentials to the record.
2922
3001
 
2923
3002
  This is useful for the client side to setup the ssh config of the
2924
3003
  cluster.
2925
3004
  """
2926
- if record is None:
2927
- return
2928
- handle = record['handle']
2929
- if handle is None:
2930
- return
2931
- record['resources_str'] = resources_utils.get_readable_resources_repr(
2932
- handle, simplify=True)
2933
- record[
2934
- 'resources_str_full'] = resources_utils.get_readable_resources_repr(
2935
- handle, simplify=False)
2936
- credentials = ssh_credential_from_yaml(handle.cluster_yaml,
2937
- handle.docker_user,
2938
- handle.ssh_user)
2939
-
2940
- if not credentials:
3005
+ records_with_handle = []
3006
+
3007
+ # only act on records that have a handle
3008
+ for record in records:
3009
+ if record is None:
3010
+ continue
3011
+ handle = record['handle']
3012
+ if handle is None:
3013
+ continue
3014
+ record[
3015
+ 'resources_str'] = resources_utils.get_readable_resources_repr(
3016
+ handle, simplify=True)
3017
+ record[
3018
+ 'resources_str_full'] = resources_utils.get_readable_resources_repr(
3019
+ handle, simplify=False)
3020
+ records_with_handle.append(record)
3021
+ if len(records_with_handle) == 0:
2941
3022
  return
2942
- ssh_private_key_path = credentials.get('ssh_private_key', None)
2943
- if ssh_private_key_path is not None:
2944
- if not os.path.exists(os.path.expanduser(ssh_private_key_path)):
2945
- auth.create_ssh_key_files_from_db(ssh_private_key_path)
2946
- with open(os.path.expanduser(ssh_private_key_path),
2947
- 'r',
2948
- encoding='utf-8') as f:
2949
- credentials['ssh_private_key_content'] = f.read()
2950
- else:
2951
- private_key_path, _ = auth.get_or_generate_keys()
2952
- with open(os.path.expanduser(private_key_path),
2953
- 'r',
2954
- encoding='utf-8') as f:
2955
- credentials['ssh_private_key_content'] = f.read()
2956
- record['credentials'] = credentials
3023
+
3024
+ handles = [record['handle'] for record in records_with_handle]
3025
+ credentials = ssh_credentials_from_handles(handles)
3026
+ cached_private_keys: Dict[str, str] = {}
3027
+ for record, credential in zip(records_with_handle, credentials):
3028
+ if not credential:
3029
+ continue
3030
+ ssh_private_key_path = credential.get('ssh_private_key', None)
3031
+ if ssh_private_key_path is not None:
3032
+ expanded_private_key_path = os.path.expanduser(
3033
+ ssh_private_key_path)
3034
+ if not os.path.exists(expanded_private_key_path):
3035
+ auth.create_ssh_key_files_from_db(ssh_private_key_path)
3036
+ else:
3037
+ private_key_path, _ = auth.get_or_generate_keys()
3038
+ expanded_private_key_path = os.path.expanduser(private_key_path)
3039
+ if expanded_private_key_path in cached_private_keys:
3040
+ credential['ssh_private_key_content'] = cached_private_keys[
3041
+ expanded_private_key_path]
3042
+ else:
3043
+ with open(expanded_private_key_path, 'r',
3044
+ encoding='utf-8') as f:
3045
+ credential['ssh_private_key_content'] = f.read()
3046
+ cached_private_keys[expanded_private_key_path] = credential[
3047
+ 'ssh_private_key_content']
3048
+ record['credentials'] = credential
2957
3049
 
2958
3050
  def _update_records_with_resources(
2959
3051
  records: List[Optional[Dict[str, Any]]]) -> None:
@@ -2980,9 +3072,7 @@ def get_clusters(
2980
3072
  if handle.launched_resources.accelerators else None)
2981
3073
 
2982
3074
  # Add auth_config to the records
2983
- for record in records:
2984
- _update_record_with_credentials_and_resources_str(record)
2985
-
3075
+ _update_records_with_credentials_and_resources_str(records)
2986
3076
  if refresh == common.StatusRefreshMode.NONE:
2987
3077
  # Add resources to the records
2988
3078
  _update_records_with_resources(records)
@@ -3022,7 +3112,7 @@ def get_clusters(
3022
3112
  cluster_name,
3023
3113
  force_refresh_statuses=force_refresh_statuses,
3024
3114
  acquire_per_cluster_status_lock=True)
3025
- _update_record_with_credentials_and_resources_str(record)
3115
+ _update_records_with_credentials_and_resources_str([record])
3026
3116
  except (exceptions.ClusterStatusFetchingError,
3027
3117
  exceptions.CloudUserIdentityError,
3028
3118
  exceptions.ClusterOwnerIdentityMismatchError) as e:
@@ -65,6 +65,7 @@ from sky.utils import context_utils
65
65
  from sky.utils import controller_utils
66
66
  from sky.utils import directory_utils
67
67
  from sky.utils import env_options
68
+ from sky.utils import lock_events
68
69
  from sky.utils import locks
69
70
  from sky.utils import log_utils
70
71
  from sky.utils import message_utils
@@ -2498,7 +2499,12 @@ class CloudVmRayResourceHandle(backends.backend.ResourceHandle):
2498
2499
  self.stable_internal_external_ips = stable_internal_external_ips
2499
2500
 
2500
2501
  @context_utils.cancellation_guard
2501
- @annotations.lru_cache(scope='global')
2502
+ # we expect different request to be acting on different clusters
2503
+ # (= different handles) so we have no real expectation of cache hit
2504
+ # across requests.
2505
+ # Do not change this cache to global scope
2506
+ # without understanding https://github.com/skypilot-org/skypilot/pull/6908
2507
+ @annotations.lru_cache(scope='request', maxsize=10)
2502
2508
  @timeline.event
2503
2509
  def get_command_runners(self,
2504
2510
  force_cached: bool = False,
@@ -2854,7 +2860,12 @@ class LocalResourcesHandle(CloudVmRayResourceHandle):
2854
2860
  self.is_grpc_enabled = False
2855
2861
 
2856
2862
  @context_utils.cancellation_guard
2857
- @annotations.lru_cache(scope='global')
2863
+ # we expect different request to be acting on different clusters
2864
+ # (= different handles) so we have no real expectation of cache hit
2865
+ # across requests.
2866
+ # Do not change this cache to global scope
2867
+ # without understanding https://github.com/skypilot-org/skypilot/pull/6908
2868
+ @annotations.lru_cache(scope='request', maxsize=10)
2858
2869
  @timeline.event
2859
2870
  def get_command_runners(self,
2860
2871
  force_cached: bool = False,
@@ -3112,7 +3123,12 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3112
3123
  retry_until_up: bool = False,
3113
3124
  skip_unnecessary_provisioning: bool = False,
3114
3125
  ) -> Tuple[Optional[CloudVmRayResourceHandle], bool]:
3115
- with timeline.DistributedLockEvent(lock_id, _CLUSTER_LOCK_TIMEOUT):
3126
+ with lock_events.DistributedLockEvent(lock_id, _CLUSTER_LOCK_TIMEOUT):
3127
+ # Reset spinner message to remove any mention of being blocked
3128
+ # by other requests.
3129
+ rich_utils.force_update_status(
3130
+ ux_utils.spinner_message('Launching'))
3131
+
3116
3132
  # Try to launch the exiting cluster first. If no existing
3117
3133
  # cluster, this function will create a to_provision_config
3118
3134
  # with required resources.
@@ -16,6 +16,7 @@ import pathlib
16
16
  import re
17
17
  import shutil
18
18
  import subprocess
19
+ import sys
19
20
  import tempfile
20
21
  from typing import Optional, Tuple
21
22
 
@@ -133,19 +134,45 @@ def _build_sky_wheel() -> pathlib.Path:
133
134
  # It is important to normalize the path, otherwise 'pip wheel' would
134
135
  # treat the directory as a file and generate an empty wheel.
135
136
  norm_path = str(tmp_dir) + os.sep
137
+ # TODO(#5046): Consider adding native UV support for building wheels.
138
+ # Use `python -m pip` instead of `pip3` for better compatibility across
139
+ # different environments (conda, venv, UV, system Python, etc.)
136
140
  try:
137
- # TODO(suquark): For python>=3.7, 'subprocess.run' supports capture
138
- # of the output.
139
141
  subprocess.run([
140
- 'pip3', 'wheel', '--no-deps', norm_path, '--wheel-dir',
142
+ sys.executable, '-m', 'pip', 'wheel', '--no-deps', norm_path,
143
+ '--wheel-dir',
141
144
  str(tmp_dir)
142
145
  ],
143
- stdout=subprocess.DEVNULL,
144
- stderr=subprocess.PIPE,
145
- check=True)
146
+ capture_output=True,
147
+ check=True,
148
+ text=True)
146
149
  except subprocess.CalledProcessError as e:
147
- raise RuntimeError('Failed to build pip wheel for SkyPilot. '
148
- f'Error message: {e.stderr.decode()}') from e
150
+ error_msg = e.stderr
151
+ if 'No module named pip' in error_msg:
152
+ # pip module not found - provide helpful suggestions based on
153
+ # the available package managers
154
+ if shutil.which('uv'):
155
+ msg = ('pip module not found. Since you have UV installed, '
156
+ 'you can install pip by running:\n'
157
+ ' uv pip install pip')
158
+ elif shutil.which('conda'):
159
+ msg = (
160
+ 'pip module not found. Since you have conda installed, '
161
+ 'you can install pip by running:\n'
162
+ ' conda install pip')
163
+ else:
164
+ msg = ('pip module not found. Please install pip for your '
165
+ f'Python environment ({sys.executable}).')
166
+ else:
167
+ # Other pip errors
168
+ msg = f'pip wheel command failed. Error: {error_msg}'
169
+ raise RuntimeError('Failed to build pip wheel for SkyPilot.\n' +
170
+ msg) from e
171
+ except FileNotFoundError as e:
172
+ # Python executable not found (extremely rare)
173
+ raise RuntimeError(
174
+ f'Failed to build pip wheel for SkyPilot. '
175
+ f'Python executable not found: {sys.executable}') from e
149
176
 
150
177
  try:
151
178
  wheel_path = next(tmp_dir.glob(_WHEEL_PATTERN))
@@ -77,6 +77,103 @@ DEFAULT_SECURITY_GROUP_NAME = f'sky-sg-{common_utils.user_and_hostname_hash()}'
77
77
  # Security group to use when user specified ports in their resources.
78
78
  USER_PORTS_SECURITY_GROUP_NAME = 'sky-sg-{}'
79
79
 
80
+ # GPU instance types that support EFA
81
+ # TODO(hailong): Some CPU instance types also support EFA, may need to support
82
+ # all of them later.
83
+ # TODO(hailong): Add the EFA info in catalog.
84
+ _EFA_INSTANCE_TYPE_PREFIXES = [
85
+ 'g4dn.',
86
+ 'g5.',
87
+ 'g6.',
88
+ 'gr6.',
89
+ 'g6e.',
90
+ 'p4d.',
91
+ 'p4de.',
92
+ 'p5.',
93
+ 'p5e.',
94
+ 'p5en.',
95
+ 'p6-b200.',
96
+ ]
97
+
98
+ # Docker run options for EFA.
99
+ # Refer to https://github.com/ofiwg/libfabric/issues/6437 for updating
100
+ # memlock ulimit
101
+ _EFA_DOCKER_RUN_OPTIONS = [
102
+ '--cap-add=IPC_LOCK',
103
+ '--device=/dev/infiniband',
104
+ '--ulimit memlock=-1:-1',
105
+ ]
106
+
107
+ # AWS EFA image name.
108
+ # Refer to https://docs.aws.amazon.com/dlami/latest/devguide/aws-deep-learning-base-gpu-ami-ubuntu-22-04.html for latest version. # pylint: disable=line-too-long
109
+ # TODO(hailong): may need to update the version later.
110
+ _EFA_IMAGE_NAME = 'Deep Learning Base OSS Nvidia Driver GPU AMI' \
111
+ ' (Ubuntu 22.04) 20250808'
112
+
113
+
114
+ def _is_efa_instance_type(instance_type: str) -> bool:
115
+ """Check if the instance type is in EFA supported instance family."""
116
+ return any(
117
+ instance_type.startswith(prefix)
118
+ for prefix in _EFA_INSTANCE_TYPE_PREFIXES)
119
+
120
+
121
+ @annotations.lru_cache(scope='global', maxsize=128)
122
+ def _get_efa_image_id(region_name: str) -> Optional[str]:
123
+ """Get the EFA image id for the given region."""
124
+ try:
125
+ client = aws.client('ec2', region_name=region_name)
126
+ response = client.describe_images(Filters=[{
127
+ 'Name': 'name',
128
+ 'Values': [_EFA_IMAGE_NAME]
129
+ }])
130
+ if 'Images' not in response:
131
+ return None
132
+ if len(response['Images']) == 0:
133
+ return None
134
+ available_images = [
135
+ img for img in response['Images'] if img['State'] == 'available'
136
+ ]
137
+ if len(available_images) == 0:
138
+ return None
139
+ sorted_images = sorted(available_images,
140
+ key=lambda x: x['CreationDate'],
141
+ reverse=True)
142
+ return sorted_images[0]['ImageId']
143
+ except (aws.botocore_exceptions().NoCredentialsError,
144
+ aws.botocore_exceptions().ProfileNotFound,
145
+ aws.botocore_exceptions().ClientError) as e:
146
+ with ux_utils.print_exception_no_traceback():
147
+ raise ValueError(f'Failed to get EFA image id: {e}') from None
148
+
149
+
150
+ @annotations.lru_cache(scope='global', maxsize=128)
151
+ def _get_max_efa_interfaces(instance_type: str, region_name: str) -> int:
152
+ """Get the maximum number of EFA interfaces for the given instance type."""
153
+ if not _is_efa_instance_type(instance_type):
154
+ return 0
155
+ try:
156
+ client = aws.client('ec2', region_name=region_name)
157
+ response = client.describe_instance_types(
158
+ InstanceTypes=[instance_type],
159
+ Filters=[{
160
+ 'Name': 'network-info.efa-supported',
161
+ 'Values': ['true']
162
+ }])
163
+ if 'InstanceTypes' in response and len(response['InstanceTypes']) > 0:
164
+ network_info = response['InstanceTypes'][0]['NetworkInfo']
165
+ if ('EfaInfo' in network_info and
166
+ 'MaximumEfaInterfaces' in network_info['EfaInfo']):
167
+ return network_info['EfaInfo']['MaximumEfaInterfaces']
168
+ return 0
169
+ except (aws.botocore_exceptions().NoCredentialsError,
170
+ aws.botocore_exceptions().ProfileNotFound,
171
+ aws.botocore_exceptions().ClientError) as e:
172
+ with ux_utils.print_exception_no_traceback():
173
+ raise ValueError(
174
+ f'Failed to get max EFA interfaces for {instance_type}: {e}'
175
+ ) from None
176
+
80
177
 
81
178
  class AWSIdentityType(enum.Enum):
82
179
  """AWS identity type.
@@ -295,8 +392,13 @@ class AWS(clouds.Cloud):
295
392
  image_id: Optional[Dict[Optional[str], str]],
296
393
  region_name: str,
297
394
  instance_type: str,
395
+ enable_efa: bool,
298
396
  ) -> str:
299
397
  if image_id is None:
398
+ if enable_efa:
399
+ efa_image_id = _get_efa_image_id(region_name)
400
+ if efa_image_id:
401
+ return efa_image_id
300
402
  return cls._get_default_ami(region_name, instance_type)
301
403
  if None in image_id:
302
404
  image_id_str = image_id[None]
@@ -499,12 +601,25 @@ class AWS(clouds.Cloud):
499
601
  custom_resources = resources_utils.make_ray_custom_resources_str(
500
602
  acc_dict)
501
603
 
604
+ network_tier = (resources.network_tier if resources.network_tier
605
+ is not None else resources_utils.NetworkTier.STANDARD)
606
+ if network_tier == resources_utils.NetworkTier.BEST:
607
+ max_efa_interfaces = _get_max_efa_interfaces(
608
+ resources.instance_type, region_name)
609
+ enable_efa = max_efa_interfaces > 0
610
+ else:
611
+ max_efa_interfaces = 0
612
+ enable_efa = False
613
+
614
+ docker_run_options = []
502
615
  if resources.extract_docker_image() is not None:
503
616
  image_id_to_use = None
617
+ if enable_efa:
618
+ docker_run_options = _EFA_DOCKER_RUN_OPTIONS
504
619
  else:
505
620
  image_id_to_use = resources.image_id
506
621
  image_id = self._get_image_id(image_id_to_use, region_name,
507
- resources.instance_type)
622
+ resources.instance_type, enable_efa)
508
623
 
509
624
  root_device_name = self.get_image_root_device_name(
510
625
  image_id, region_name)
@@ -563,6 +678,8 @@ class AWS(clouds.Cloud):
563
678
  'security_group': security_group,
564
679
  'security_group_managed_by_skypilot':
565
680
  str(security_group != user_security_group).lower(),
681
+ 'max_efa_interfaces': max_efa_interfaces,
682
+ 'docker_run_options': docker_run_options,
566
683
  **AWS._get_disk_specs(resources.disk_tier)
567
684
  }
568
685
 
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6dae1cd599a34def.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/9DW6d9jaP2kZt0NcgIfFa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/9DW6d9jaP2kZt0NcgIfFa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"9DW6d9jaP2kZt0NcgIfFa","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/hYJYFIxp_ZFONR4wTIJqZ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hYJYFIxp_ZFONR4wTIJqZ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"hYJYFIxp_ZFONR4wTIJqZ","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- !function(){"use strict";var t,e,n,r,c,o,u,a,i,f={},s={};function d(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={exports:{}},r=!0;try{f[t](n,n.exports,d),r=!1}finally{r&&delete s[t]}return n.exports}d.m=f,t=[],d.O=function(e,n,r,c){if(n){c=c||0;for(var o=t.length;o>0&&t[o-1][2]>c;o--)t[o]=t[o-1];t[o]=[n,r,c];return}for(var u=1/0,o=0;o<t.length;o++){for(var n=t[o][0],r=t[o][1],c=t[o][2],a=!0,i=0;i<n.length;i++)u>=c&&Object.keys(d.O).every(function(t){return d.O[t](n[i])})?n.splice(i--,1):(a=!1,c<u&&(u=c));if(a){t.splice(o--,1);var f=r();void 0!==f&&(e=f)}}return e},d.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return d.d(e,{a:e}),e},n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},d.t=function(t,r){if(1&r&&(t=this(t)),8&r||"object"==typeof t&&t&&(4&r&&t.__esModule||16&r&&"function"==typeof t.then))return t;var c=Object.create(null);d.r(c);var o={};e=e||[null,n({}),n([]),n(n)];for(var u=2&r&&t;"object"==typeof u&&!~e.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(e){o[e]=function(){return t[e]}});return o.default=function(){return t},d.d(c,o),c},d.d=function(t,e){for(var n in e)d.o(e,n)&&!d.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},d.f={},d.e=function(t){return Promise.all(Object.keys(d.f).reduce(function(e,n){return d.f[n](t,e),e},[]))},d.u=function(t){return 2350===t?"static/chunks/2350.fab69e61bac57b23.js":3937===t?"static/chunks/3937.210053269f121201.js":7325===t?"static/chunks/7325.b4bc99ce0892dcd5.js":9025===t?"static/chunks/9025.a1bef12d672bb66d.js":9984===t?"static/chunks/9984.7eb6cc51fb460cae.js":9946===t?"static/chunks/9946.3b7b43c217ff70ec.js":4045===t?"static/chunks/4045.b30465273dc5e468.js":4725===t?"static/chunks/4725.10f7a9a5d3ea8208.js":7669===t?"static/chunks/7669.1f5d9a402bf5cc42.js":3785===t?"static/chunks/3785.d5b86f6ebc88e6e6.js":4783===t?"static/chunks/4783.c485f48348349f47.js":"static/chunks/"+t+"-"+({616:"3d59f75e2ccf9321",1121:"8afcf719ea87debc",1141:"943efc7aff0f0c06",1272:"1ef0bf0237faccdb",3015:"6c9c09593b1e67b6",3850:"ff4a9a69d978632b",4676:"9da7fdbde90b5549",5739:"d67458fcb1386c92",6130:"2be46d70a38f1e82",6135:"4b4d5e824b7f9d3c",6601:"06114c982db410b6",6856:"049014c6d43d127b",6989:"01359c57e018caa4",6990:"08b2a1cae076a943",7205:"88191679e7988c57",7411:"b15471acd2cba716",8969:"4a6f1a928fb6d370",9037:"89a84fd7fa31362d"})[t]+".js"},d.miniCssF=function(t){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),d.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},c="_N_E:",d.l=function(t,e,n,o){if(r[t]){r[t].push(e);return}if(void 0!==n)for(var u,a,i=document.getElementsByTagName("script"),f=0;f<i.length;f++){var s=i[f];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==c+n){u=s;break}}u||(a=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,d.nc&&u.setAttribute("nonce",d.nc),u.setAttribute("data-webpack",c+n),u.src=d.tu(t)),r[t]=[e];var b=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(t){return t(n)}),e)return e(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),a&&document.head.appendChild(u)},d.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(t){return d.tt().createScriptURL(t)},d.p="/dashboard/_next/",u={2272:0},d.f.j=function(t,e){var n=d.o(u,t)?u[t]:void 0;if(0!==n){if(n)e.push(n[2]);else if(2272!=t){var r=new Promise(function(e,r){n=u[t]=[e,r]});e.push(n[2]=r);var c=d.p+d.u(t),o=Error();d.l(c,function(e){if(d.o(u,t)&&(0!==(n=u[t])&&(u[t]=void 0),n)){var r=e&&("load"===e.type?"missing":e.type),c=e&&e.target&&e.target.src;o.message="Loading chunk "+t+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+t,t)}else u[t]=0}},d.O.j=function(t){return 0===u[t]},a=function(t,e){var n,r,c=e[0],o=e[1],a=e[2],i=0;if(c.some(function(t){return 0!==u[t]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(a)var f=a(d)}for(t&&t(e);i<c.length;i++)r=c[i],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(f)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(a.bind(null,0)),i.push=a.bind(null,i.push.bind(i)),d.nc=void 0}();
1
+ !function(){"use strict";var t,e,n,r,c,o,u,a,i,f={},s={};function d(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={exports:{}},r=!0;try{f[t](n,n.exports,d),r=!1}finally{r&&delete s[t]}return n.exports}d.m=f,t=[],d.O=function(e,n,r,c){if(n){c=c||0;for(var o=t.length;o>0&&t[o-1][2]>c;o--)t[o]=t[o-1];t[o]=[n,r,c];return}for(var u=1/0,o=0;o<t.length;o++){for(var n=t[o][0],r=t[o][1],c=t[o][2],a=!0,i=0;i<n.length;i++)u>=c&&Object.keys(d.O).every(function(t){return d.O[t](n[i])})?n.splice(i--,1):(a=!1,c<u&&(u=c));if(a){t.splice(o--,1);var f=r();void 0!==f&&(e=f)}}return e},d.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return d.d(e,{a:e}),e},n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},d.t=function(t,r){if(1&r&&(t=this(t)),8&r||"object"==typeof t&&t&&(4&r&&t.__esModule||16&r&&"function"==typeof t.then))return t;var c=Object.create(null);d.r(c);var o={};e=e||[null,n({}),n([]),n(n)];for(var u=2&r&&t;"object"==typeof u&&!~e.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(e){o[e]=function(){return t[e]}});return o.default=function(){return t},d.d(c,o),c},d.d=function(t,e){for(var n in e)d.o(e,n)&&!d.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},d.f={},d.e=function(t){return Promise.all(Object.keys(d.f).reduce(function(e,n){return d.f[n](t,e),e},[]))},d.u=function(t){return 2350===t?"static/chunks/2350.fab69e61bac57b23.js":7325===t?"static/chunks/7325.b4bc99ce0892dcd5.js":3937===t?"static/chunks/3937.210053269f121201.js":9025===t?"static/chunks/9025.a1bef12d672bb66d.js":9984===t?"static/chunks/9984.7eb6cc51fb460cae.js":9946===t?"static/chunks/9946.3b7b43c217ff70ec.js":7669===t?"static/chunks/7669.1f5d9a402bf5cc42.js":4045===t?"static/chunks/4045.b30465273dc5e468.js":4725===t?"static/chunks/4725.10f7a9a5d3ea8208.js":3785===t?"static/chunks/3785.d5b86f6ebc88e6e6.js":4783===t?"static/chunks/4783.c485f48348349f47.js":"static/chunks/"+t+"-"+({616:"3d59f75e2ccf9321",1121:"8afcf719ea87debc",1141:"943efc7aff0f0c06",1272:"1ef0bf0237faccdb",3015:"6c9c09593b1e67b6",3850:"ff4a9a69d978632b",4676:"9da7fdbde90b5549",5739:"d67458fcb1386c92",6130:"2be46d70a38f1e82",6135:"4b4d5e824b7f9d3c",6601:"06114c982db410b6",6856:"049014c6d43d127b",6989:"01359c57e018caa4",6990:"08b2a1cae076a943",7205:"88191679e7988c57",7411:"b15471acd2cba716",8969:"4a6f1a928fb6d370",9037:"89a84fd7fa31362d"})[t]+".js"},d.miniCssF=function(t){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),d.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},c="_N_E:",d.l=function(t,e,n,o){if(r[t]){r[t].push(e);return}if(void 0!==n)for(var u,a,i=document.getElementsByTagName("script"),f=0;f<i.length;f++){var s=i[f];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==c+n){u=s;break}}u||(a=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,d.nc&&u.setAttribute("nonce",d.nc),u.setAttribute("data-webpack",c+n),u.src=d.tu(t)),r[t]=[e];var b=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(t){return t(n)}),e)return e(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),a&&document.head.appendChild(u)},d.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(t){return d.tt().createScriptURL(t)},d.p="/dashboard/_next/",u={2272:0},d.f.j=function(t,e){var n=d.o(u,t)?u[t]:void 0;if(0!==n){if(n)e.push(n[2]);else if(2272!=t){var r=new Promise(function(e,r){n=u[t]=[e,r]});e.push(n[2]=r);var c=d.p+d.u(t),o=Error();d.l(c,function(e){if(d.o(u,t)&&(0!==(n=u[t])&&(u[t]=void 0),n)){var r=e&&("load"===e.type?"missing":e.type),c=e&&e.target&&e.target.src;o.message="Loading chunk "+t+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+t,t)}else u[t]=0}},d.O.j=function(t){return 0===u[t]},a=function(t,e){var n,r,c=e[0],o=e[1],a=e[2],i=0;if(c.some(function(t){return 0!==u[t]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(a)var f=a(d)}for(t&&t(e);i<c.length;i++)r=c[i],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(f)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(a.bind(null,0)),i.push=a.bind(null,i.push.bind(i)),d.nc=void 0}();
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6dae1cd599a34def.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/9DW6d9jaP2kZt0NcgIfFa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/9DW6d9jaP2kZt0NcgIfFa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"9DW6d9jaP2kZt0NcgIfFa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/hYJYFIxp_ZFONR4wTIJqZ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/hYJYFIxp_ZFONR4wTIJqZ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"hYJYFIxp_ZFONR4wTIJqZ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>