skypilot-nightly 1.0.0.dev20250513__tar.gz → 1.0.0.dev20250515__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. {skypilot_nightly-1.0.0.dev20250513/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250515}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/backend.py +3 -2
  4. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/backend_utils.py +16 -17
  5. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/cloud_vm_ray_backend.py +47 -16
  6. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/aws.py +11 -9
  7. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/azure.py +16 -13
  8. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/cloud.py +4 -3
  9. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/cudo.py +3 -2
  10. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/do.py +3 -2
  11. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/fluidstack.py +3 -3
  12. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/gcp.py +25 -9
  13. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/ibm.py +12 -10
  14. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/kubernetes.py +3 -2
  15. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/lambda_cloud.py +6 -6
  16. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/nebius.py +6 -5
  17. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/oci.py +9 -7
  18. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/paperspace.py +3 -2
  19. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/runpod.py +9 -9
  20. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/scp.py +5 -3
  21. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +33 -11
  22. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/gcp_catalog.py +7 -1
  23. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/vast.py +8 -7
  24. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/vsphere.py +4 -2
  25. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/core.py +18 -12
  26. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/404.html +1 -1
  27. skypilot_nightly-1.0.0.dev20250515/sky/dashboard/out/_next/static/chunks/pages/index-6b0d9e5031b70c58.js +1 -0
  28. {skypilot_nightly-1.0.0.dev20250513/sky/dashboard/out/_next/static/2dkponv64SfFShA8Rnw0D → skypilot_nightly-1.0.0.dev20250515/sky/dashboard/out/_next/static/jFI0Y-uJZ_XDK5IGJpKFU}/_buildManifest.js +1 -1
  29. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  30. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/clusters/[cluster].html +1 -1
  31. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/clusters.html +1 -1
  32. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/index.html +1 -1
  33. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/jobs/[job].html +1 -1
  34. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/jobs.html +1 -1
  35. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/execution.py +33 -0
  36. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/recovery_strategy.py +4 -1
  37. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/server/core.py +6 -12
  38. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/optimizer.py +19 -13
  39. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/utils.py +26 -1
  40. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/resources.py +206 -43
  41. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/server/core.py +0 -5
  42. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/spot_placer.py +3 -0
  43. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/server.py +51 -13
  44. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/log_lib.py +12 -3
  45. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/log_lib.pyi +5 -0
  46. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/task.py +8 -6
  47. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/nebius-ray.yml.j2 +3 -1
  48. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/cli_utils/status_utils.py +6 -5
  49. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/controller_utils.py +39 -43
  50. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/dag_utils.py +4 -2
  51. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/resources_utils.py +3 -0
  52. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/schemas.py +33 -24
  53. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  54. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/skypilot_nightly.egg-info/SOURCES.txt +3 -3
  55. skypilot_nightly-1.0.0.dev20250513/sky/dashboard/out/_next/static/chunks/pages/index-f9f039532ca8cbc4.js +0 -1
  56. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/LICENSE +0 -0
  57. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/MANIFEST.in +0 -0
  58. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/README.md +0 -0
  59. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/pyproject.toml +0 -0
  60. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/setup.cfg +0 -0
  61. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/setup.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/__init__.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/aws.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/azure.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/cloudflare.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/common.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/cudo.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/do.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/docker.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/gcp.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/ibm.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/kubernetes.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/nebius.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/oci.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/runpod.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/vast.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/adaptors/vsphere.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/admin_policy.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/authentication.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/__init__.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/docker_utils.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/local_docker_backend.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/backends/wheel_utils.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/benchmark/__init__.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/benchmark/benchmark_state.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/benchmark/benchmark_utils.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/check.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/cli.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/client/__init__.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/client/cli.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/client/common.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/client/sdk.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/cloud_stores.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/__init__.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/__init__.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/common.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/config.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/constants.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_ibm.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/do_catalog.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/utils/__init__.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/utils/aws_utils.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/utils/azure_utils.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/utils/gcp_utils.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/utils/oci_utils.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/clouds/utils/scp_utils.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dag.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/236-f49500b82ad5392d.js +0 -0
  132. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js +0 -0
  133. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js +0 -0
  134. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/678-206dddca808e6d16.js +0 -0
  135. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/845-0ca6f2c1ba667c3b.js +0 -0
  136. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/979-7bf73a4c7cea0f5c.js +0 -0
  137. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -0
  138. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -0
  139. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -0
  140. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -0
  141. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js +0 -0
  142. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -0
  143. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-e15db85d0ea1fbe1.js +0 -0
  144. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js +0 -0
  145. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js +0 -0
  146. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-03f279c6741fb48b.js +0 -0
  147. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js +0 -0
  148. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  149. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/chunks/webpack-830f59b8404e96b8.js +0 -0
  150. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css +0 -0
  151. {skypilot_nightly-1.0.0.dev20250513/sky/dashboard/out/_next/static/2dkponv64SfFShA8Rnw0D → skypilot_nightly-1.0.0.dev20250515/sky/dashboard/out/_next/static/jFI0Y-uJZ_XDK5IGJpKFU}/_ssgManifest.js +0 -0
  152. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/favicon.ico +0 -0
  153. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/skypilot.svg +0 -0
  154. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  155. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/data/__init__.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/data/data_transfer.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/data/data_utils.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/data/mounting_utils.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/data/storage.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/data/storage_utils.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/exceptions.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/global_user_state.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/__init__.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/client/__init__.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/client/sdk.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/constants.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/controller.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/dashboard/dashboard.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/dashboard/static/favicon.ico +0 -0
  170. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/dashboard/templates/index.html +0 -0
  171. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/scheduler.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/server/__init__.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/server/dashboard_utils.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/server/server.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/state.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/jobs/utils.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/models.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/__init__.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/aws/__init__.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/aws/config.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/aws/instance.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/aws/utils.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/azure/__init__.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/azure/azure-config-template.json +0 -0
  185. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/azure/config.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/azure/instance.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/common.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/constants.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/cudo/__init__.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/cudo/config.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/cudo/cudo_machine_type.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/cudo/cudo_utils.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/cudo/cudo_wrapper.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/cudo/instance.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/do/__init__.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/do/config.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/do/constants.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/do/instance.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/do/utils.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/docker_utils.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/fluidstack/__init__.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/fluidstack/config.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/fluidstack/instance.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/gcp/__init__.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/gcp/config.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/gcp/constants.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/gcp/instance.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/gcp/instance_utils.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/gcp/mig_utils.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/instance_setup.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/__init__.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/config.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/constants.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/instance.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  217. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/network.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/kubernetes/network_utils.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/lambda_cloud/__init__.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/lambda_cloud/config.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/lambda_cloud/instance.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/logging.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/metadata_utils.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/nebius/__init__.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/nebius/config.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/nebius/instance.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/nebius/utils.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/oci/__init__.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/oci/config.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/oci/instance.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/oci/query_utils.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/paperspace/__init__.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/paperspace/config.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/paperspace/constants.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/paperspace/instance.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/paperspace/utils.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/provisioner.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/__init__.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/api/__init__.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/api/commands.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/api/pods.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/config.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/instance.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/runpod/utils.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vast/__init__.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vast/config.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vast/instance.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vast/utils.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/__init__.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/__init__.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/custom_script.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/id_generator.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/service_manager.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/common/vim_utils.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/config.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/instance.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/provision/vsphere/vsphere_utils.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/__init__.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/autoscalers.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/client/__init__.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/client/sdk.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/constants.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/controller.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/load_balancer.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/load_balancing_policies.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/replica_managers.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/serve_state.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/serve_utils.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/server/__init__.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/server/server.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/service.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/serve/service_spec.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/__init__.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/common.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/config.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/constants.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/html/log.html +0 -0
  285. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/__init__.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/event_loop.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/executor.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/payloads.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/preconditions.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/process.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/queues/__init__.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/queues/local_queue.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/queues/mp_queue.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/requests.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/serializers/__init__.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/serializers/decoders.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/requests/serializers/encoders.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/stream_utils.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/server/uvicorn.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/setup_files/MANIFEST.in +0 -0
  301. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/setup_files/dependencies.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/setup_files/setup.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/sky_logging.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/LICENSE +0 -0
  305. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/__init__.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/attempt_skylet.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/autostop_lib.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/configs.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/constants.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/events.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/job_lib.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/__init__.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/command_runner.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/ibm/__init__.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/ibm/node_provider.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/ibm/utils.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/scp/__init__.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/scp/config.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/providers/scp/node_provider.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/__init__.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  323. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/cli.py.patch +0 -0
  324. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  325. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  326. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  327. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/updater.py.patch +0 -0
  328. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/ray_patches/worker.py.patch +0 -0
  329. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/skylet.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skylet/subprocess_daemon.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/skypilot_config.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/aws-ray.yml.j2 +0 -0
  333. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/azure-ray.yml.j2 +0 -0
  334. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/cudo-ray.yml.j2 +0 -0
  335. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/do-ray.yml.j2 +0 -0
  336. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  337. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/gcp-ray.yml.j2 +0 -0
  338. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/ibm-ray.yml.j2 +0 -0
  339. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/jobs-controller.yaml.j2 +0 -0
  340. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  341. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  342. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  343. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  344. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  345. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/lambda-ray.yml.j2 +0 -0
  346. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/local-ray.yml.j2 +0 -0
  347. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/oci-ray.yml.j2 +0 -0
  348. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/paperspace-ray.yml.j2 +0 -0
  349. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/runpod-ray.yml.j2 +0 -0
  350. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/scp-ray.yml.j2 +0 -0
  351. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  352. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  353. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/vast-ray.yml.j2 +0 -0
  354. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/vsphere-ray.yml.j2 +0 -0
  355. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/templates/websocket_proxy.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/usage/__init__.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/usage/constants.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/usage/usage_lib.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/__init__.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/accelerator_registry.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/admin_policy_utils.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/annotations.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/atomic.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/aws/__init__.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/aws/get_default_security_group.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/cli_utils/__init__.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/cluster_utils.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/command_runner.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/command_runner.pyi +0 -0
  370. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/common.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/common_utils.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/config_utils.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/context.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/context_utils.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/control_master_utils.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/db_utils.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/env_options.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/__init__.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/create_cluster.sh +0 -0
  380. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  381. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  382. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  383. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  384. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  385. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  386. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  387. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  388. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  389. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  390. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  391. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/kubernetes_enums.py +0 -0
  392. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/log_utils.py +0 -0
  393. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/message_utils.py +0 -0
  394. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/registry.py +0 -0
  395. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/rich_console_utils.py +0 -0
  396. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/rich_utils.py +0 -0
  397. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/status_lib.py +0 -0
  398. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/subprocess_utils.py +0 -0
  399. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/timeline.py +0 -0
  400. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/ux_utils.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/sky/utils/validator.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  403. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  404. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/skypilot_nightly.egg-info/requires.txt +0 -0
  405. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/skypilot_nightly.egg-info/top_level.txt +0 -0
  406. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_api.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_cli.py +0 -0
  408. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_config.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_failover.py +0 -0
  410. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_global_user_state.py +0 -0
  411. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_jobs.py +0 -0
  412. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_jobs_and_serve.py +0 -0
  413. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_list_accelerators.py +0 -0
  414. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_optimizer_dryruns.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_optimizer_random_dag.py +0 -0
  416. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_serve_autoscaler.py +0 -0
  417. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_smoke.py +0 -0
  418. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_storage.py +0 -0
  419. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/tests/test_wheels.py +0 -0
  420. {skypilot_nightly-1.0.0.dev20250513 → skypilot_nightly-1.0.0.dev20250515}/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.dev20250513
3
+ Version: 1.0.0.dev20250515
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -5,7 +5,7 @@ from typing import Optional
5
5
  import urllib.request
6
6
 
7
7
  # Replaced with the current commit when building the wheels.
8
- _SKYPILOT_COMMIT_SHA = 'c23907b7f1baf65740791dc1e17ff1411e7d9a97'
8
+ _SKYPILOT_COMMIT_SHA = 'c7068a2c749d03a06ecc8940d34a4911ac9391bc'
9
9
 
10
10
 
11
11
  def _get_git_commit():
@@ -35,7 +35,7 @@ def _get_git_commit():
35
35
 
36
36
 
37
37
  __commit__ = _get_git_commit()
38
- __version__ = '1.0.0.dev20250513'
38
+ __version__ = '1.0.0.dev20250515'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -37,8 +37,9 @@ class Backend(Generic[_ResourceHandleType]):
37
37
  ResourceHandle = ResourceHandle # pylint: disable=invalid-name
38
38
 
39
39
  # --- APIs ---
40
- def check_resources_fit_cluster(self, handle: _ResourceHandleType,
41
- task: 'task_lib.Task') -> None:
40
+ def check_resources_fit_cluster(
41
+ self, handle: _ResourceHandleType,
42
+ task: 'task_lib.Task') -> Optional['resources.Resources']:
42
43
  """Check whether resources of the task are satisfied by cluster."""
43
44
  raise NotImplementedError
44
45
 
@@ -606,7 +606,7 @@ def write_cluster_config(
606
606
  # other cases, we exclude the cloud from credential file uploads after
607
607
  # running required checks.
608
608
  assert cluster_name is not None
609
- excluded_clouds = set()
609
+ excluded_clouds: Set[clouds.Cloud] = set()
610
610
  remote_identity_config = skypilot_config.get_nested(
611
611
  (str(cloud).lower(), 'remote_identity'), None)
612
612
  remote_identity = schemas.get_default_remote_identity(str(cloud).lower())
@@ -1557,7 +1557,8 @@ def check_owner_identity(cluster_name: str) -> None:
1557
1557
  if not isinstance(handle, backends.CloudVmRayResourceHandle):
1558
1558
  return
1559
1559
 
1560
- cloud = handle.launched_resources.cloud
1560
+ launched_resources = handle.launched_resources.assert_launchable()
1561
+ cloud = launched_resources.cloud
1561
1562
  user_identities = cloud.get_user_identities()
1562
1563
  owner_identity = record['owner']
1563
1564
  if user_identities is None:
@@ -1721,12 +1722,12 @@ def check_can_clone_disk_and_override_task(
1721
1722
  'a new target cluster name.')
1722
1723
 
1723
1724
  new_task_resources = []
1724
- original_cloud = handle.launched_resources.cloud
1725
+ launched_resources = handle.launched_resources.assert_launchable()
1726
+ original_cloud = launched_resources.cloud
1725
1727
  original_cloud.check_features_are_supported(
1726
- handle.launched_resources,
1728
+ launched_resources,
1727
1729
  {clouds.CloudImplementationFeatures.CLONE_DISK_FROM_CLUSTER})
1728
1730
 
1729
- assert original_cloud is not None, handle.launched_resources
1730
1731
  has_override = False
1731
1732
  has_disk_size_met = False
1732
1733
  has_cloud_met = False
@@ -1740,7 +1741,7 @@ def check_can_clone_disk_and_override_task(
1740
1741
  continue
1741
1742
  has_cloud_met = True
1742
1743
 
1743
- override_param = {}
1744
+ override_param: Dict[str, Any] = {}
1744
1745
  if task_resources.cloud is None:
1745
1746
  override_param['cloud'] = original_cloud
1746
1747
  if task_resources.region is None:
@@ -1934,8 +1935,8 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
1934
1935
  return global_user_state.get_cluster_from_name(cluster_name)
1935
1936
 
1936
1937
  # All cases below are transitioning the cluster to non-UP states.
1937
-
1938
- if (not node_statuses and handle.launched_resources.cloud.STATUS_VERSION >=
1938
+ launched_resources = handle.launched_resources.assert_launchable()
1939
+ if (not node_statuses and launched_resources.cloud.STATUS_VERSION >=
1939
1940
  clouds.StatusVersion.SKYPILOT):
1940
1941
  # Note: launched_at is set during sky launch, even on an existing
1941
1942
  # cluster. This will catch the case where the cluster was terminated on
@@ -2470,7 +2471,7 @@ def is_controller_accessible(
2470
2471
  need_connection_check):
2471
2472
  # Check ssh connection if (1) controller is in INIT state, or (2) we failed to fetch the
2472
2473
  # status, both of which can happen when controller's status lock is held by another `sky jobs launch` or
2473
- # `sky serve up`. If we have controller's head_ip available and it is ssh-reachable,
2474
+ # `sky serve up`. If we have controller's head_ip available and it is ssh-reachable,
2474
2475
  # we can allow access to the controller.
2475
2476
  ssh_credentials = ssh_credential_from_yaml(handle.cluster_yaml,
2476
2477
  handle.docker_user,
@@ -2968,7 +2969,7 @@ def get_endpoints(cluster: str,
2968
2969
  f'for cluster {cluster!r} with backend '
2969
2970
  f'{get_backend_from_handle(handle).NAME}.')
2970
2971
 
2971
- launched_resources = handle.launched_resources
2972
+ launched_resources = handle.launched_resources.assert_launchable()
2972
2973
  cloud = launched_resources.cloud
2973
2974
  try:
2974
2975
  cloud.check_features_are_supported(
@@ -2985,11 +2986,11 @@ def get_endpoints(cluster: str,
2985
2986
  head_ip=handle.head_ip,
2986
2987
  provider_config=config['provider'])
2987
2988
 
2989
+ launched_resources = handle.launched_resources.assert_launchable()
2988
2990
  # Validation before returning the endpoints
2989
2991
  if port is not None:
2990
2992
  # If the requested endpoint was not to be exposed
2991
- port_set = resources_utils.port_ranges_to_set(
2992
- handle.launched_resources.ports)
2993
+ port_set = resources_utils.port_ranges_to_set(launched_resources.ports)
2993
2994
  if port not in port_set:
2994
2995
  logger.warning(f'Port {port} is not exposed on '
2995
2996
  f'cluster {cluster!r}.')
@@ -2998,8 +2999,7 @@ def get_endpoints(cluster: str,
2998
2999
  if port not in port_details:
2999
3000
  error_msg = (f'Port {port} not exposed yet. '
3000
3001
  f'{_ENDPOINTS_RETRY_MESSAGE} ')
3001
- if handle.launched_resources.cloud.is_same_cloud(
3002
- clouds.Kubernetes()):
3002
+ if launched_resources.cloud.is_same_cloud(clouds.Kubernetes()):
3003
3003
  # Add Kubernetes specific debugging info
3004
3004
  error_msg += (kubernetes_utils.get_endpoint_debug_message())
3005
3005
  logger.warning(error_msg)
@@ -3008,7 +3008,7 @@ def get_endpoints(cluster: str,
3008
3008
  else:
3009
3009
  if not port_details:
3010
3010
  # If cluster had no ports to be exposed
3011
- if handle.launched_resources.ports is None:
3011
+ if launched_resources.ports is None:
3012
3012
  logger.warning(f'Cluster {cluster!r} does not have any '
3013
3013
  'ports to be exposed.')
3014
3014
  return {}
@@ -3017,8 +3017,7 @@ def get_endpoints(cluster: str,
3017
3017
  else:
3018
3018
  error_msg = (f'No endpoints exposed yet. '
3019
3019
  f'{_ENDPOINTS_RETRY_MESSAGE} ')
3020
- if handle.launched_resources.cloud.is_same_cloud(
3021
- clouds.Kubernetes()):
3020
+ if launched_resources.cloud.is_same_cloud(clouds.Kubernetes()):
3022
3021
  # Add Kubernetes specific debugging info
3023
3022
  error_msg += \
3024
3023
  kubernetes_utils.get_endpoint_debug_message()
@@ -303,8 +303,6 @@ class RayCodeGen:
303
303
  from sky.skylet import autostop_lib
304
304
  from sky.skylet import constants
305
305
  from sky.skylet import job_lib
306
- from sky.utils import context
307
- from sky.utils import context_utils
308
306
  from sky.utils import log_utils
309
307
  from sky.utils import subprocess_utils
310
308
 
@@ -367,6 +365,7 @@ class RayCodeGen:
367
365
  # by ray.remote. This should be removed once we have a better way to
368
366
  # specify dependencies for ray.
369
367
  inspect.getsource(log_lib._ProcessingArgs), # pylint: disable=protected-access
368
+ inspect.getsource(log_lib._get_context), # pylint: disable=protected-access
370
369
  inspect.getsource(log_lib._handle_io_stream), # pylint: disable=protected-access
371
370
  inspect.getsource(log_lib.process_subprocess_stream),
372
371
  inspect.getsource(log_lib.run_with_log),
@@ -1359,6 +1358,8 @@ class RetryingVmProvisioner(object):
1359
1358
  # Get previous cluster status
1360
1359
  cluster_exists = prev_cluster_status is not None
1361
1360
 
1361
+ to_provision = to_provision.assert_launchable()
1362
+
1362
1363
  assert to_provision.region is not None, (
1363
1364
  to_provision, 'region should have been set by the optimizer.')
1364
1365
  region = clouds.Region(to_provision.region)
@@ -2034,6 +2035,7 @@ class RetryingVmProvisioner(object):
2034
2035
  f' that never expire or a service account.\033[0m')
2035
2036
  logger.warning(warnings)
2036
2037
 
2038
+ to_provision = to_provision.assert_launchable()
2037
2039
  # Retrying launchable resources.
2038
2040
  while True:
2039
2041
  try:
@@ -2163,9 +2165,10 @@ class RetryingVmProvisioner(object):
2163
2165
  raise exceptions.ResourcesUnavailableError(
2164
2166
  _RESOURCES_UNAVAILABLE_LOG + '\n' + table.get_string(),
2165
2167
  failover_history=failover_history)
2166
- to_provision = task.best_resources
2168
+ best_resources = task.best_resources
2167
2169
  assert task in self._dag.tasks, 'Internal logic error.'
2168
- assert to_provision is not None, task
2170
+ assert best_resources is not None, task
2171
+ to_provision = best_resources
2169
2172
  return config_dict
2170
2173
 
2171
2174
 
@@ -2431,19 +2434,21 @@ class CloudVmRayResourceHandle(backends.backend.ResourceHandle):
2431
2434
  self.cluster_yaml, self.docker_user, self.ssh_user)
2432
2435
  if avoid_ssh_control:
2433
2436
  ssh_credentials.pop('ssh_control_name', None)
2437
+
2438
+ launched_resources = self.launched_resources.assert_launchable()
2434
2439
  updated_to_skypilot_provisioner_after_provisioned = (
2435
- self.launched_resources.cloud.PROVISIONER_VERSION >=
2440
+ launched_resources.cloud.PROVISIONER_VERSION >=
2436
2441
  clouds.ProvisionerVersion.SKYPILOT and
2437
2442
  self.cached_external_ips is not None and
2438
2443
  self.cached_cluster_info is None)
2439
2444
  if updated_to_skypilot_provisioner_after_provisioned:
2440
2445
  logger.debug(
2441
- f'{self.launched_resources.cloud} has been updated to the new '
2446
+ f'{launched_resources.cloud} has been updated to the new '
2442
2447
  f'provisioner after cluster {self.cluster_name} was '
2443
2448
  f'provisioned. Cached IPs are used for connecting to the '
2444
2449
  'cluster.')
2445
2450
  if (clouds.ProvisionerVersion.RAY_PROVISIONER_SKYPILOT_TERMINATOR >=
2446
- self.launched_resources.cloud.PROVISIONER_VERSION or
2451
+ launched_resources.cloud.PROVISIONER_VERSION or
2447
2452
  updated_to_skypilot_provisioner_after_provisioned):
2448
2453
  ip_list = (self.cached_external_ips
2449
2454
  if force_cached else self.external_ips())
@@ -3147,8 +3152,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3147
3152
  resources_utils.port_ranges_to_set(current_ports) -
3148
3153
  resources_utils.port_ranges_to_set(prev_ports))
3149
3154
  if open_new_ports:
3150
- cloud = handle.launched_resources.cloud
3151
- if not (cloud.OPEN_PORTS_VERSION <=
3155
+ launched_resources = handle.launched_resources.assert_launchable()
3156
+ if not (launched_resources.cloud.OPEN_PORTS_VERSION <=
3152
3157
  clouds.OpenPortsVersion.LAUNCH_ONLY):
3153
3158
  with rich_utils.safe_status(
3154
3159
  ux_utils.spinner_message(
@@ -3252,9 +3257,10 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3252
3257
  TODO: Delete COPY storage_mounts in task.sync_storage_mounts(), and
3253
3258
  assert here that all storage_mounts are MOUNT mode.
3254
3259
  """
3260
+ launched_resources = handle.launched_resources.assert_launchable()
3255
3261
  with rich_utils.safe_status(ux_utils.spinner_message('Syncing files')):
3256
3262
  controller_utils.replace_skypilot_config_path_in_file_mounts(
3257
- handle.launched_resources.cloud, all_file_mounts)
3263
+ launched_resources.cloud, all_file_mounts)
3258
3264
  self._execute_file_mounts(handle, all_file_mounts)
3259
3265
  self._execute_storage_mounts(handle, storage_mounts)
3260
3266
  self._set_storage_mounts_metadata(handle.cluster_name,
@@ -4154,7 +4160,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4154
4160
  log_path = os.path.join(os.path.expanduser(self.log_dir),
4155
4161
  'teardown.log')
4156
4162
  log_abs_path = os.path.abspath(log_path)
4157
- cloud = handle.launched_resources.cloud
4163
+ launched_resources = handle.launched_resources.assert_launchable()
4164
+ cloud = launched_resources.cloud
4158
4165
  config = common_utils.read_yaml(handle.cluster_yaml)
4159
4166
  cluster_name = handle.cluster_name
4160
4167
  cluster_name_on_cloud = handle.cluster_name_on_cloud
@@ -4366,10 +4373,12 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4366
4373
  # the right resource to provision the cluster.
4367
4374
  if handle.cluster_yaml is not None:
4368
4375
  try:
4369
- cloud = handle.launched_resources.cloud
4376
+ launched_resources = (
4377
+ handle.launched_resources.assert_launchable())
4378
+ cloud = launched_resources.cloud
4370
4379
  config = common_utils.read_yaml(handle.cluster_yaml)
4371
4380
  cloud.check_features_are_supported(
4372
- handle.launched_resources,
4381
+ launched_resources,
4373
4382
  {clouds.CloudImplementationFeatures.OPEN_PORTS})
4374
4383
  provision_lib.cleanup_ports(repr(cloud),
4375
4384
  cluster_name_on_cloud,
@@ -4495,6 +4504,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4495
4504
 
4496
4505
  # down = False is the default, but warn the user in case
4497
4506
  # they have explicitly specified it.
4507
+ # TODO(cooperc): Fix for new autostop stuff.
4498
4508
  config_override_down = skypilot_config.get_nested(
4499
4509
  (controller.value.controller_type, 'controller',
4500
4510
  'autostop', 'down'), None)
@@ -4664,6 +4674,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4664
4674
  handle_before_refresh = record['handle']
4665
4675
  status_before_refresh = record['status']
4666
4676
 
4677
+ handle: Optional[CloudVmRayResourceHandle]
4667
4678
  prev_cluster_status, handle = (status_before_refresh,
4668
4679
  handle_before_refresh)
4669
4680
 
@@ -4684,7 +4695,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4684
4695
  prev_cluster_status = None
4685
4696
  handle = None
4686
4697
  # We should check the cluster_ever_up after refresh, because if the
4687
- # cluster is terminated (through console or auto-dwon), the record will
4698
+ # cluster is terminated (through console or auto-down), the record will
4688
4699
  # become None and the cluster_ever_up should be considered as False.
4689
4700
  cluster_ever_up = record is not None and record['cluster_ever_up']
4690
4701
  prev_config_hash = record['config_hash'] if record is not None else None
@@ -4697,16 +4708,21 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4697
4708
  self.check_resources_fit_cluster(handle, task)
4698
4709
  # Use the existing cluster.
4699
4710
  assert handle.launched_resources is not None, (cluster_name, handle)
4711
+ # Take a random resource in order to get resource info that applies
4712
+ # to all resources.
4713
+ one_task_resource = list(task.resources)[0]
4700
4714
  # Assume resources share the same ports.
4701
4715
  for resource in task.resources:
4702
- assert resource.ports == list(task.resources)[0].ports
4716
+ assert resource.ports == one_task_resource.ports
4703
4717
  requested_ports_set = resources_utils.port_ranges_to_set(
4704
- list(task.resources)[0].ports)
4718
+ one_task_resource.ports)
4705
4719
  current_ports_set = resources_utils.port_ranges_to_set(
4706
4720
  handle.launched_resources.ports)
4707
4721
  all_ports = resources_utils.port_set_to_ranges(current_ports_set |
4708
4722
  requested_ports_set)
4709
4723
  to_provision = handle.launched_resources
4724
+ assert to_provision is not None
4725
+ to_provision = to_provision.assert_launchable()
4710
4726
  if (to_provision.cloud.OPEN_PORTS_VERSION <=
4711
4727
  clouds.OpenPortsVersion.LAUNCH_ONLY):
4712
4728
  if not requested_ports_set <= current_ports_set:
@@ -4720,6 +4736,21 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4720
4736
  'a new cluster with the desired ports open.')
4721
4737
  if all_ports:
4722
4738
  to_provision = to_provision.copy(ports=all_ports)
4739
+ # Docker login should always be the same for all resources, since
4740
+ # it's set from envs.
4741
+ for resource in task.resources:
4742
+ assert (resource.docker_login_config ==
4743
+ one_task_resource.docker_login_config), (
4744
+ resource.docker_login_config,
4745
+ one_task_resource.docker_login_config)
4746
+ # If we have docker login config in the new task, override the
4747
+ # existing resources to pick up new credentials. This allows the
4748
+ # user to specify new or fixed credentials if the existing
4749
+ # credentials are not working. If we don't do this, the credentials
4750
+ # from the existing resources will always be reused.
4751
+ if one_task_resource.docker_login_config is not None:
4752
+ to_provision = to_provision.copy(
4753
+ _docker_login_config=one_task_resource.docker_login_config)
4723
4754
  return RetryingVmProvisioner.ToProvisionConfig(
4724
4755
  cluster_name,
4725
4756
  to_provision,
@@ -440,18 +440,19 @@ class AWS(clouds.Cloud):
440
440
  region_name = region.name
441
441
  zone_names = [zone.name for zone in zones]
442
442
 
443
- r = resources
444
- # r.accelerators is cleared but .instance_type encodes the info.
445
- acc_dict = self.get_accelerators_from_instance_type(r.instance_type)
443
+ resources = resources.assert_launchable()
444
+ # resources.accelerators is cleared but .instance_type encodes the info.
445
+ acc_dict = self.get_accelerators_from_instance_type(
446
+ resources.instance_type)
446
447
  custom_resources = resources_utils.make_ray_custom_resources_str(
447
448
  acc_dict)
448
449
 
449
- if r.extract_docker_image() is not None:
450
+ if resources.extract_docker_image() is not None:
450
451
  image_id_to_use = None
451
452
  else:
452
- image_id_to_use = r.image_id
453
+ image_id_to_use = resources.image_id
453
454
  image_id = self._get_image_id(image_id_to_use, region_name,
454
- r.instance_type)
455
+ resources.instance_type)
455
456
 
456
457
  disk_encrypted = skypilot_config.get_nested(('aws', 'disk_encrypted'),
457
458
  False)
@@ -483,17 +484,17 @@ class AWS(clouds.Cloud):
483
484
  'in `~/.sky/config.yaml`.')
484
485
 
485
486
  return {
486
- 'instance_type': r.instance_type,
487
+ 'instance_type': resources.instance_type,
487
488
  'custom_resources': custom_resources,
488
489
  'disk_encrypted': disk_encrypted,
489
- 'use_spot': r.use_spot,
490
+ 'use_spot': resources.use_spot,
490
491
  'region': region_name,
491
492
  'zones': ','.join(zone_names),
492
493
  'image_id': image_id,
493
494
  'security_group': security_group,
494
495
  'security_group_managed_by_skypilot':
495
496
  str(security_group != user_security_group).lower(),
496
- **AWS._get_disk_specs(r.disk_tier)
497
+ **AWS._get_disk_specs(resources.disk_tier)
497
498
  }
498
499
 
499
500
  def _get_feasible_launchable_resources(
@@ -971,6 +972,7 @@ class AWS(clouds.Cloud):
971
972
  botocore.exceptions.ClientError: error in Boto3 client request.
972
973
  """
973
974
 
975
+ resources = resources.assert_launchable()
974
976
  instance_type = resources.instance_type
975
977
  region = resources.region
976
978
  use_spot = resources.use_spot
@@ -325,9 +325,10 @@ class Azure(clouds.Cloud):
325
325
 
326
326
  region_name = region.name
327
327
 
328
- r = resources
329
- # r.accelerators is cleared but .instance_type encodes the info.
330
- acc_dict = self.get_accelerators_from_instance_type(r.instance_type)
328
+ resources = resources.assert_launchable()
329
+ # resources.accelerators is cleared but .instance_type encodes the info.
330
+ acc_dict = self.get_accelerators_from_instance_type(
331
+ resources.instance_type)
331
332
  acc_count = None
332
333
  if acc_dict is not None:
333
334
  acc_count = str(sum(acc_dict.values()))
@@ -339,8 +340,9 @@ class Azure(clouds.Cloud):
339
340
  # pylint: disable=import-outside-toplevel
340
341
  from sky.clouds.service_catalog import azure_catalog
341
342
  gen_version = azure_catalog.get_gen_version_from_instance_type(
342
- r.instance_type)
343
- image_id = self._get_default_image_tag(gen_version, r.instance_type)
343
+ resources.instance_type)
344
+ image_id = self._get_default_image_tag(gen_version,
345
+ resources.instance_type)
344
346
  else:
345
347
  if None in resources.image_id:
346
348
  image_id = resources.image_id[None]
@@ -407,18 +409,19 @@ class Azure(clouds.Cloud):
407
409
  """).split('\n')
408
410
 
409
411
  def _failover_disk_tier() -> Optional[resources_utils.DiskTier]:
410
- if (r.disk_tier is not None and
411
- r.disk_tier != resources_utils.DiskTier.BEST):
412
- return r.disk_tier
412
+ if (resources.disk_tier is not None and
413
+ resources.disk_tier != resources_utils.DiskTier.BEST):
414
+ return resources.disk_tier
413
415
  # Failover disk tier from high to low. Default disk tier
414
416
  # (Premium_LRS, medium) only support s-series instance types,
415
417
  # so we failover to lower tiers for non-s-series.
416
418
  all_tiers = list(reversed(resources_utils.DiskTier))
417
419
  start_index = all_tiers.index(
418
- Azure._translate_disk_tier(r.disk_tier))
420
+ Azure._translate_disk_tier(resources.disk_tier))
419
421
  while start_index < len(all_tiers):
420
422
  disk_tier = all_tiers[start_index]
421
- ok, _ = Azure.check_disk_tier(r.instance_type, disk_tier)
423
+ ok, _ = Azure.check_disk_tier(resources.instance_type,
424
+ disk_tier)
422
425
  if ok:
423
426
  return disk_tier
424
427
  start_index += 1
@@ -426,11 +429,11 @@ class Azure(clouds.Cloud):
426
429
 
427
430
  disk_tier = _failover_disk_tier()
428
431
 
429
- resources_vars = {
430
- 'instance_type': r.instance_type,
432
+ resources_vars: Dict[str, Any] = {
433
+ 'instance_type': resources.instance_type,
431
434
  'custom_resources': custom_resources,
432
435
  'num_gpus': acc_count,
433
- 'use_spot': r.use_spot,
436
+ 'use_spot': resources.use_spot,
434
437
  'region': region_name,
435
438
  # Azure does not support specific zones.
436
439
  'zones': None,
@@ -11,7 +11,8 @@ import collections
11
11
  import enum
12
12
  import math
13
13
  import typing
14
- from typing import Dict, Iterable, Iterator, List, Optional, Set, Tuple, Union
14
+ from typing import (Any, Dict, Iterable, Iterator, List, Optional, Set, Tuple,
15
+ Union)
15
16
 
16
17
  from typing_extensions import assert_never
17
18
 
@@ -302,7 +303,7 @@ class Cloud:
302
303
  zones: Optional[List['Zone']],
303
304
  num_nodes: int,
304
305
  dryrun: bool = False,
305
- ) -> Dict[str, Optional[str]]:
306
+ ) -> Dict[str, Any]:
306
307
  """Converts planned sky.Resources to cloud-specific resource variables.
307
308
 
308
309
  These variables are used to fill the node type section (instance type,
@@ -721,7 +722,7 @@ class Cloud:
721
722
  Raises:
722
723
  ResourcesMismatchError: If the accelerator is not supported.
723
724
  """
724
- assert resources.is_launchable(), resources
725
+ resources = resources.assert_launchable()
725
726
 
726
727
  def _equal_accelerators(
727
728
  acc_requested: Optional[Dict[str, Union[int, float]]],
@@ -201,8 +201,9 @@ class Cudo(clouds.Cloud):
201
201
  dryrun: bool = False,
202
202
  ) -> Dict[str, Optional[str]]:
203
203
  del zones, cluster_name # unused
204
- r = resources
205
- acc_dict = self.get_accelerators_from_instance_type(r.instance_type)
204
+ resources = resources.assert_launchable()
205
+ acc_dict = self.get_accelerators_from_instance_type(
206
+ resources.instance_type)
206
207
  custom_resources = resources_utils.make_ray_custom_resources_str(
207
208
  acc_dict)
208
209
 
@@ -181,8 +181,9 @@ class DO(clouds.Cloud):
181
181
  dryrun: bool = False) -> Dict[str, Optional[str]]:
182
182
  del zones, dryrun, cluster_name
183
183
 
184
- r = resources
185
- acc_dict = self.get_accelerators_from_instance_type(r.instance_type)
184
+ resources = resources.assert_launchable()
185
+ acc_dict = self.get_accelerators_from_instance_type(
186
+ resources.instance_type)
186
187
  if acc_dict is not None:
187
188
  custom_resources = json.dumps(acc_dict, separators=(',', ':'))
188
189
  else:
@@ -188,9 +188,9 @@ class Fluidstack(clouds.Cloud):
188
188
  ) -> Dict[str, Optional[str]]:
189
189
 
190
190
  assert zones is None, 'FluidStack does not support zones.'
191
-
192
- r = resources
193
- acc_dict = self.get_accelerators_from_instance_type(r.instance_type)
191
+ resources = resources.assert_launchable()
192
+ acc_dict = self.get_accelerators_from_instance_type(
193
+ resources.instance_type)
194
194
  custom_resources = resources_utils.make_ray_custom_resources_str(
195
195
  acc_dict)
196
196
 
@@ -521,11 +521,13 @@ class GCP(clouds.Cloud):
521
521
  else:
522
522
  # Convert to GCP names:
523
523
  # https://cloud.google.com/compute/docs/gpus
524
- if acc in ('A100-80GB', 'L4'):
524
+ if acc in ('A100-80GB', 'L4', 'B200'):
525
525
  # A100-80GB and L4 have a different name pattern.
526
526
  resources_vars['gpu'] = f'nvidia-{acc.lower()}'
527
527
  elif acc in ('H100', 'H100-MEGA'):
528
528
  resources_vars['gpu'] = f'nvidia-{acc.lower()}-80gb'
529
+ elif acc in ('H200',):
530
+ resources_vars['gpu'] = f'nvidia-{acc.lower()}-141gb'
529
531
  else:
530
532
  resources_vars['gpu'] = 'nvidia-tesla-{}'.format(
531
533
  acc.lower())
@@ -1037,7 +1039,7 @@ class GCP(clouds.Cloud):
1037
1039
  @staticmethod
1038
1040
  def _check_instance_type_accelerators_combination(
1039
1041
  resources: 'resources.Resources') -> None:
1040
- assert resources.is_launchable(), resources
1042
+ resources = resources.assert_launchable()
1041
1043
  service_catalog.check_accelerator_attachable_to_host(
1042
1044
  resources.instance_type, resources.accelerators, resources.zone,
1043
1045
  'gcp')
@@ -1059,15 +1061,24 @@ class GCP(clouds.Cloud):
1059
1061
  raise exceptions.NotSupportedError(msg)
1060
1062
 
1061
1063
  @classmethod
1062
- def _get_disk_type(cls, instance_type: Optional[str],
1063
- disk_tier: Optional[resources_utils.DiskTier]) -> str:
1064
-
1065
- def _propagate_disk_type(lowest: Optional[str] = None,
1066
- highest: Optional[str] = None) -> None:
1064
+ def _get_disk_type(
1065
+ cls,
1066
+ instance_type: Optional[str],
1067
+ disk_tier: Optional[resources_utils.DiskTier],
1068
+ ) -> str:
1069
+
1070
+ def _propagate_disk_type(
1071
+ lowest: Optional[str] = None,
1072
+ highest: Optional[str] = None,
1073
+ # pylint: disable=redefined-builtin
1074
+ all: Optional[str] = None) -> None:
1067
1075
  if lowest is not None:
1068
1076
  tier2name[resources_utils.DiskTier.LOW] = lowest
1069
1077
  if highest is not None:
1070
1078
  tier2name[resources_utils.DiskTier.ULTRA] = highest
1079
+ if all is not None:
1080
+ for tier in tier2name:
1081
+ tier2name[tier] = all
1071
1082
 
1072
1083
  tier = cls._translate_disk_tier(disk_tier)
1073
1084
 
@@ -1081,7 +1092,8 @@ class GCP(clouds.Cloud):
1081
1092
 
1082
1093
  # Remap series-specific disk types.
1083
1094
  # Reference: https://github.com/skypilot-org/skypilot/issues/4705
1084
- series = instance_type.split('-')[0] # type: ignore
1095
+ assert instance_type is not None, (instance_type, disk_tier)
1096
+ series = instance_type.split('-')[0]
1085
1097
 
1086
1098
  # General handling of unsupported disk types
1087
1099
  if series in ['n1', 'a2', 'g2']:
@@ -1092,6 +1104,9 @@ class GCP(clouds.Cloud):
1092
1104
  # These series don't support pd-standard, use pd-balanced for LOW.
1093
1105
  _propagate_disk_type(
1094
1106
  lowest=tier2name[resources_utils.DiskTier.MEDIUM])
1107
+ if instance_type.startswith('a3-ultragpu'):
1108
+ # a3-ultragpu instances only support hyperdisk-balanced.
1109
+ _propagate_disk_type(all='hyperdisk-balanced')
1095
1110
 
1096
1111
  # Series specific handling
1097
1112
  if series == 'n2':
@@ -1114,7 +1129,8 @@ class GCP(clouds.Cloud):
1114
1129
  specs: Dict[str, Any] = {
1115
1130
  'disk_tier': cls._get_disk_type(instance_type, disk_tier)
1116
1131
  }
1117
- if disk_tier == resources_utils.DiskTier.ULTRA:
1132
+ if (disk_tier == resources_utils.DiskTier.ULTRA and
1133
+ specs['disk_tier'] == 'pd-extreme'):
1118
1134
  # Only pd-extreme supports custom iops.
1119
1135
  # see https://cloud.google.com/compute/docs/disks#disk-types
1120
1136
  specs['disk_iops'] = 20000