skypilot-nightly 1.0.0.dev20250613__tar.gz → 1.0.0.dev20250615__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 (481) hide show
  1. {skypilot_nightly-1.0.0.dev20250613/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250615}/PKG-INFO +2 -1
  2. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/__init__.py +4 -2
  3. skypilot_nightly-1.0.0.dev20250615/sky/adaptors/hyperbolic.py +8 -0
  4. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/authentication.py +20 -2
  5. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/backend_utils.py +3 -1
  6. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/cloud_vm_ray_backend.py +2 -1
  7. skypilot_nightly-1.0.0.dev20250615/sky/catalog/data_fetchers/fetch_hyperbolic.py +136 -0
  8. skypilot_nightly-1.0.0.dev20250615/sky/catalog/hyperbolic_catalog.py +133 -0
  9. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/__init__.py +2 -0
  10. skypilot_nightly-1.0.0.dev20250615/sky/clouds/hyperbolic.py +276 -0
  11. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/404.html +1 -1
  12. {skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/UdgJCk2sZFLJgFJW_qiWG → skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/R07f8gwfXT1U0zRznq4Lg}/_buildManifest.js +1 -1
  13. skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/37-824c707421f6f003.js +6 -0
  14. skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/600.bd2ed8c076b720ec.js +16 -0
  15. skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/856-0776dc6ed6000c39.js → skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/856-c2c39c0912285e54.js +1 -1
  16. skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/938-385d190b95815e11.js +1 -0
  17. skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/webpack-5c3e6471d04780c6.js → skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/webpack-1b69b196a4dbffef.js +1 -1
  18. skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/css/8e97adcaacc15293.css +3 -0
  19. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  20. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/clusters/[cluster].html +1 -1
  21. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/clusters.html +1 -1
  22. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/config.html +1 -1
  23. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/index.html +1 -1
  24. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/infra/[context].html +1 -1
  25. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/infra.html +1 -1
  26. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/jobs/[job].html +1 -1
  27. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/jobs.html +1 -1
  28. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/users.html +1 -1
  29. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/workspace/new.html +1 -1
  30. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/workspaces/[name].html +1 -1
  31. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/workspaces.html +1 -1
  32. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/__init__.py +1 -0
  33. skypilot_nightly-1.0.0.dev20250615/sky/provision/hyperbolic/__init__.py +11 -0
  34. skypilot_nightly-1.0.0.dev20250615/sky/provision/hyperbolic/config.py +10 -0
  35. skypilot_nightly-1.0.0.dev20250615/sky/provision/hyperbolic/instance.py +423 -0
  36. skypilot_nightly-1.0.0.dev20250615/sky/provision/hyperbolic/utils.py +373 -0
  37. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/setup_files/dependencies.py +2 -1
  38. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/constants.py +1 -1
  39. skypilot_nightly-1.0.0.dev20250615/sky/templates/hyperbolic-ray.yml.j2 +67 -0
  40. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/users/permission.py +2 -0
  41. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/deploy_remote_cluster.py +3 -1
  42. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615/skypilot_nightly.egg-info}/PKG-INFO +2 -1
  43. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/skypilot_nightly.egg-info/SOURCES.txt +22 -13
  44. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/skypilot_nightly.egg-info/requires.txt +2 -0
  45. skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/37-d8aebf1683522a0b.js +0 -6
  46. skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/600.15a0009177e86b86.js +0 -16
  47. skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/938-ab185187a63f9cdb.js +0 -1
  48. skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/css/5d71bfc09f184bab.css +0 -3
  49. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/LICENSE +0 -0
  50. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/MANIFEST.in +0 -0
  51. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/README.md +0 -0
  52. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/pyproject.toml +0 -0
  53. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/setup.cfg +0 -0
  54. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/setup.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/__init__.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/aws.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/azure.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/cloudflare.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/common.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/cudo.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/do.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/docker.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/gcp.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/ibm.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/kubernetes.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/nebius.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/oci.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/runpod.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/vast.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/adaptors/vsphere.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/admin_policy.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/__init__.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/backend.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/docker_utils.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/local_docker_backend.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/backends/wheel_utils.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/benchmark/__init__.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/benchmark/benchmark_state.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/benchmark/benchmark_utils.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/__init__.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/aws_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/azure_catalog.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/common.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/config.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/cudo_catalog.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/__init__.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/analyze.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_aws.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_azure.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_cudo.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_fluidstack.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_gcp.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_ibm.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_vast.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/data_fetchers/fetch_vsphere.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/do_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/fluidstack_catalog.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/gcp_catalog.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/ibm_catalog.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/kubernetes_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/lambda_catalog.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/nebius_catalog.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/oci_catalog.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/paperspace_catalog.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/runpod_catalog.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/scp_catalog.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/ssh_catalog.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/vast_catalog.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/catalog/vsphere_catalog.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/check.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/cli.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/client/__init__.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/client/cli.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/client/common.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/client/oauth.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/client/sdk.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/cloud_stores.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/aws.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/azure.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/cloud.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/cudo.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/do.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/fluidstack.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/gcp.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/ibm.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/kubernetes.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/lambda_cloud.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/nebius.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/oci.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/paperspace.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/runpod.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/scp.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/ssh.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/utils/__init__.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/utils/aws_utils.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/utils/azure_utils.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/utils/gcp_utils.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/utils/oci_utils.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/utils/scp_utils.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/vast.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/clouds/vsphere.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/core.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dag.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/UdgJCk2sZFLJgFJW_qiWG → skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/R07f8gwfXT1U0zRznq4Lg}/_ssgManifest.js +0 -0
  147. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/211.692afc57e812ae1a.js +0 -0
  148. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/350.9e123a4551f68b0d.js +0 -0
  149. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/42.d39e24467181b06b.js +0 -0
  150. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/443.b2242d0efcdf5f47.js +0 -0
  151. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/470-4d1a5dbe58a8a2b9.js +0 -0
  152. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/491.b3d264269613fe09.js +0 -0
  153. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/513.211357a2914a34b2.js +0 -0
  154. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/616-d6128fa9e7cae6e6.js +0 -0
  155. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/664-047bc03493fda379.js +0 -0
  156. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/682.4dd5dc116f740b5f.js +0 -0
  157. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/760-a89d354797ce7af5.js +0 -0
  158. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/798-c0525dc3f21e488d.js +0 -0
  159. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/799-3625946b2ec2eb30.js +0 -0
  160. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/804-4c9fc53aa74bc191.js +0 -0
  161. /skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/843-6fcc4bf91ac45b39.js → /skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/843-ab9c4f609239155f.js +0 -0
  162. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/901-b424d293275e1fd7.js +0 -0
  163. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/937.3759f538f11a0953.js +0 -0
  164. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/947-6620842ef80ae879.js +0 -0
  165. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/969-20d54a9d998dc102.js +0 -0
  166. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/973-c807fc34f09c7df3.js +0 -0
  167. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -0
  168. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -0
  169. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -0
  170. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -0
  171. /skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js → /skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/pages/_app-32b2caae3445bf3b.js +0 -0
  172. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -0
  173. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-89216c616dbaa9c5.js +0 -0
  174. /skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-451a14e7e755ebbc.js → /skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-59950b2f83b66e48.js +0 -0
  175. /skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/pages/clusters-e56b17fd85d0ba58.js → /skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/pages/clusters-82a651dbad53ec6e.js +0 -0
  176. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/config-497a35a7ed49734a.js +0 -0
  177. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/index-6b0d9e5031b70c58.js +0 -0
  178. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-d2910be98e9227cb.js +0 -0
  179. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/infra-780860bcc1103945.js +0 -0
  180. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-b3dbf38b51cb29be.js +0 -0
  181. /skypilot_nightly-1.0.0.dev20250613/sky/dashboard/out/_next/static/chunks/pages/jobs-fe233baf3d073491.js → /skypilot_nightly-1.0.0.dev20250615/sky/dashboard/out/_next/static/chunks/pages/jobs-336ab80e270ce2ce.js +0 -0
  182. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/users-c69ffcab9d6e5269.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/workspace/new-31aa8bdcb7592635.js +0 -0
  184. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-c8c2191328532b7d.js +0 -0
  185. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/pages/workspaces-82e6601baa5dd280.js +0 -0
  186. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  187. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/favicon.ico +0 -0
  188. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/skypilot.svg +0 -0
  189. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  190. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/data/__init__.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/data/data_transfer.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/data/data_utils.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/data/mounting_utils.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/data/storage.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/data/storage_utils.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/exceptions.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/execution.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/global_user_state.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/__init__.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/client/__init__.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/client/sdk.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/constants.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/controller.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/recovery_strategy.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/scheduler.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/server/__init__.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/server/core.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/server/server.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/state.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/jobs/utils.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/models.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/optimizer.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/aws/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/aws/config.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/aws/instance.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/aws/utils.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/azure/__init__.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/azure/azure-config-template.json +0 -0
  219. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/azure/config.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/azure/instance.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/common.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/constants.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/cudo/__init__.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/cudo/config.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/cudo/cudo_machine_type.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/cudo/cudo_utils.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/cudo/cudo_wrapper.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/cudo/instance.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/do/__init__.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/do/config.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/do/constants.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/do/instance.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/do/utils.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/docker_utils.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/fluidstack/__init__.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/fluidstack/config.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/fluidstack/instance.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/__init__.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/config.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/constants.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/instance.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/instance_utils.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/mig_utils.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/gcp/volume_utils.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/instance_setup.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/__init__.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/config.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/constants.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/instance.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  252. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/network.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/network_utils.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/kubernetes/utils.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/lambda_cloud/__init__.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/lambda_cloud/config.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/lambda_cloud/instance.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/logging.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/metadata_utils.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/nebius/__init__.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/nebius/config.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/nebius/constants.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/nebius/instance.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/nebius/utils.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/oci/__init__.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/oci/config.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/oci/instance.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/oci/query_utils.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/paperspace/__init__.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/paperspace/config.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/paperspace/constants.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/paperspace/instance.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/paperspace/utils.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/provisioner.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/__init__.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/api/__init__.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/api/commands.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/api/pods.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/config.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/instance.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/runpod/utils.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/ssh/__init__.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vast/__init__.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vast/config.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vast/instance.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vast/utils.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/__init__.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/__init__.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/custom_script.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/id_generator.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/service_manager.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/common/vim_utils.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/config.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/instance.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/provision/vsphere/vsphere_utils.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/resources.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/__init__.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/autoscalers.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/client/__init__.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/client/sdk.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/constants.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/controller.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/load_balancer.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/load_balancing_policies.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/replica_managers.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/serve_state.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/serve_utils.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/server/__init__.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/server/core.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/server/server.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/service.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/service_spec.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/serve/spot_placer.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/__init__.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/common.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/config.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/constants.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/html/log.html +0 -0
  326. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/html/token_page.html +0 -0
  327. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/__init__.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/event_loop.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/executor.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/payloads.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/preconditions.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/process.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/queues/__init__.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/queues/local_queue.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/queues/mp_queue.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/requests.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/serializers/__init__.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/serializers/decoders.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/requests/serializers/encoders.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/server.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/stream_utils.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/server/uvicorn.py +0 -0
  343. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/setup_files/MANIFEST.in +0 -0
  344. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/setup_files/setup.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/sky_logging.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/LICENSE +0 -0
  347. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/__init__.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/attempt_skylet.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/autostop_lib.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/configs.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/events.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/job_lib.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/log_lib.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/log_lib.pyi +0 -0
  355. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/__init__.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/command_runner.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/ibm/__init__.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/ibm/node_provider.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/ibm/utils.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/scp/__init__.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/scp/config.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/providers/scp/node_provider.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/__init__.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  366. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/cli.py.patch +0 -0
  367. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  368. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  369. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  370. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/updater.py.patch +0 -0
  371. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/ray_patches/worker.py.patch +0 -0
  372. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/skylet.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skylet/subprocess_daemon.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/skypilot_config.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/task.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/aws-ray.yml.j2 +0 -0
  377. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/azure-ray.yml.j2 +0 -0
  378. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/cudo-ray.yml.j2 +0 -0
  379. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/do-ray.yml.j2 +0 -0
  380. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  381. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/gcp-ray.yml.j2 +0 -0
  382. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/ibm-ray.yml.j2 +0 -0
  383. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/jobs-controller.yaml.j2 +0 -0
  384. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  385. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  386. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  387. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  388. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  389. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/lambda-ray.yml.j2 +0 -0
  390. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/local-ray.yml.j2 +0 -0
  391. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/nebius-ray.yml.j2 +0 -0
  392. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/oci-ray.yml.j2 +0 -0
  393. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/paperspace-ray.yml.j2 +0 -0
  394. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/runpod-ray.yml.j2 +0 -0
  395. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/scp-ray.yml.j2 +0 -0
  396. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  397. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  398. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/vast-ray.yml.j2 +0 -0
  399. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/vsphere-ray.yml.j2 +0 -0
  400. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/templates/websocket_proxy.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/usage/__init__.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/usage/constants.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/usage/usage_lib.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/users/__init__.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/users/model.conf +0 -0
  406. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/users/rbac.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/users/server.py +0 -0
  408. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/__init__.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/accelerator_registry.py +0 -0
  410. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/admin_policy_utils.py +0 -0
  411. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/annotations.py +0 -0
  412. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/atomic.py +0 -0
  413. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/aws/__init__.py +0 -0
  414. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/aws/get_default_security_group.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/cli_utils/__init__.py +0 -0
  416. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/cli_utils/status_utils.py +0 -0
  417. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/cluster_utils.py +0 -0
  418. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/command_runner.py +0 -0
  419. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/command_runner.pyi +0 -0
  420. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/common.py +0 -0
  421. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/common_utils.py +0 -0
  422. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/config_utils.py +0 -0
  423. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/context.py +0 -0
  424. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/context_utils.py +0 -0
  425. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/control_master_utils.py +0 -0
  426. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/controller_utils.py +0 -0
  427. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/dag_utils.py +0 -0
  428. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/db_utils.py +0 -0
  429. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/env_options.py +0 -0
  430. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/infra_utils.py +0 -0
  431. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/__init__.py +0 -0
  432. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
  433. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/config_map_utils.py +0 -0
  434. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/create_cluster.sh +0 -0
  435. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  436. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  437. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  438. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  439. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  440. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  441. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  442. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  443. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  444. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
  445. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  446. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/kubernetes_enums.py +0 -0
  447. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/log_utils.py +0 -0
  448. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/message_utils.py +0 -0
  449. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/registry.py +0 -0
  450. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/resources_utils.py +0 -0
  451. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/rich_console_utils.py +0 -0
  452. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/rich_utils.py +0 -0
  453. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/schemas.py +0 -0
  454. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/status_lib.py +0 -0
  455. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/subprocess_utils.py +0 -0
  456. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/timeline.py +0 -0
  457. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/ux_utils.py +0 -0
  458. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/utils/validator.py +0 -0
  459. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/workspaces/__init__.py +0 -0
  460. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/workspaces/core.py +0 -0
  461. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/workspaces/server.py +0 -0
  462. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/sky/workspaces/utils.py +0 -0
  463. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  464. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  465. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/skypilot_nightly.egg-info/top_level.txt +0 -0
  466. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_api.py +0 -0
  467. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_cli.py +0 -0
  468. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_config.py +0 -0
  469. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_db_utils.py +0 -0
  470. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_failover.py +0 -0
  471. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_global_user_state.py +0 -0
  472. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_jobs.py +0 -0
  473. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_jobs_and_serve.py +0 -0
  474. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_list_accelerators.py +0 -0
  475. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_optimizer_dryruns.py +0 -0
  476. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_optimizer_random_dag.py +0 -0
  477. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_serve_autoscaler.py +0 -0
  478. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_smoke.py +0 -0
  479. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_storage.py +0 -0
  480. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/tests/test_wheels.py +0 -0
  481. {skypilot_nightly-1.0.0.dev20250613 → skypilot_nightly-1.0.0.dev20250615}/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.dev20250613
3
+ Version: 1.0.0.dev20250615
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -119,6 +119,7 @@ Requires-Dist: awscli>=1.27.10; extra == "nebius"
119
119
  Requires-Dist: botocore>=1.29.10; extra == "nebius"
120
120
  Requires-Dist: boto3>=1.26.1; extra == "nebius"
121
121
  Requires-Dist: colorama<0.4.5; extra == "nebius"
122
+ Provides-Extra: hyperbolic
122
123
  Provides-Extra: all
123
124
  Requires-Dist: awscli>=1.27.10; extra == "all"
124
125
  Requires-Dist: botocore>=1.29.10; extra == "all"
@@ -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 = '4dfa63417c4dc57a5a9fc52c9936a8dd52194d8e'
8
+ _SKYPILOT_COMMIT_SHA = 'cabefc469263d1b7b946280e31db246b68ad18b3'
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.dev20250613'
38
+ __version__ = '1.0.0.dev20250615'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -144,6 +144,7 @@ Vast = clouds.Vast
144
144
  Vsphere = clouds.Vsphere
145
145
  Fluidstack = clouds.Fluidstack
146
146
  Nebius = clouds.Nebius
147
+ Hyperbolic = clouds.Hyperbolic
147
148
 
148
149
  __all__ = [
149
150
  '__version__',
@@ -163,6 +164,7 @@ __all__ = [
163
164
  'Vsphere',
164
165
  'Fluidstack',
165
166
  'Nebius',
167
+ 'Hyperbolic',
166
168
  'Optimizer',
167
169
  'OptimizeTarget',
168
170
  'backends',
@@ -0,0 +1,8 @@
1
+ """Hyperbolic cloud adaptor."""
2
+
3
+ from sky.adaptors import common
4
+
5
+ hyperbolic = common.LazyImport(
6
+ 'hyperbolic',
7
+ import_error_message='Failed to import dependencies for Hyperbolic. '
8
+ 'Try running: pip install "skypilot[hyperbolic]"')
@@ -432,8 +432,8 @@ def setup_kubernetes_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
432
432
  # Add message saying "Please check: ~/.sky/config.yaml" to the error
433
433
  # message.
434
434
  with ux_utils.print_exception_no_traceback():
435
- raise ValueError(str(e) + ' Please check: ~/.sky/config.yaml.') \
436
- from None
435
+ raise ValueError(str(e) +
436
+ ' Please check: ~/.sky/config.yaml.') from None
437
437
  _, public_key_path = get_or_generate_keys()
438
438
 
439
439
  # Add the user's public key to the SkyPilot cluster.
@@ -567,3 +567,21 @@ def setup_fluidstack_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
567
567
  client.get_or_add_ssh_key(public_key)
568
568
  config['auth']['ssh_public_key'] = public_key_path
569
569
  return configure_ssh_info(config)
570
+
571
+
572
+ def setup_hyperbolic_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
573
+ """Sets up SSH authentication for Hyperbolic."""
574
+ _, public_key_path = get_or_generate_keys()
575
+ with open(public_key_path, 'r', encoding='utf-8') as f:
576
+ public_key = f.read().strip()
577
+
578
+ # TODO: adjust below to use public_keys instead of
579
+ # public_key once backwards-compatibility is no longer required
580
+ config['publicKey'] = public_key
581
+
582
+ # Set up auth section for Ray template
583
+ config.setdefault('auth', {})
584
+ config['auth']['ssh_user'] = 'ubuntu'
585
+ config['auth']['ssh_public_key'] = public_key_path
586
+
587
+ return configure_ssh_info(config)
@@ -939,6 +939,8 @@ def _add_auth_to_cluster_config(cloud: clouds.Cloud, tmp_yaml_path: str):
939
939
  config = auth.setup_vast_authentication(config)
940
940
  elif isinstance(cloud, clouds.Fluidstack):
941
941
  config = auth.setup_fluidstack_authentication(config)
942
+ elif isinstance(cloud, clouds.Hyperbolic):
943
+ config = auth.setup_hyperbolic_authentication(config)
942
944
  else:
943
945
  assert False, cloud
944
946
  common_utils.dump_yaml(tmp_yaml_path, config)
@@ -2508,7 +2510,7 @@ def is_controller_accessible(
2508
2510
  need_connection_check):
2509
2511
  # Check ssh connection if (1) controller is in INIT state, or (2) we failed to fetch the
2510
2512
  # status, both of which can happen when controller's status lock is held by another `sky jobs launch` or
2511
- # `sky serve up`. If we have controller's head_ip available and it is ssh-reachable,
2513
+ # `sky serve up`. If we have controller's head_ip available and it is ssh-reachable,
2512
2514
  # we can allow access to the controller.
2513
2515
  ssh_credentials = ssh_credential_from_yaml(handle.cluster_yaml,
2514
2516
  handle.docker_user,
@@ -196,7 +196,8 @@ def _get_cluster_config_template(cloud):
196
196
  clouds.Vsphere: 'vsphere-ray.yml.j2',
197
197
  clouds.Vast: 'vast-ray.yml.j2',
198
198
  clouds.Fluidstack: 'fluidstack-ray.yml.j2',
199
- clouds.Nebius: 'nebius-ray.yml.j2'
199
+ clouds.Nebius: 'nebius-ray.yml.j2',
200
+ clouds.Hyperbolic: 'hyperbolic-ray.yml.j2'
200
201
  }
201
202
  return cloud_to_template[type(cloud)]
202
203
 
@@ -0,0 +1,136 @@
1
+ """Script to fetch Hyperbolic instance data and generate catalog."""
2
+ import argparse
3
+ import csv
4
+ import json
5
+ import os
6
+ import sys
7
+ from typing import Any, Dict
8
+
9
+ import requests
10
+
11
+ ENDPOINT = 'https://api.hyperbolic.xyz/v2/skypilot/catalog'
12
+ API_KEY_PATH = os.path.expanduser('~/.hyperbolic/api_key')
13
+
14
+ REQUIRED_FIELDS = [
15
+ 'InstanceType', 'AcceleratorName', 'AcceleratorCount', 'vCPUs', 'MemoryGiB',
16
+ 'StorageGiB', 'Price', 'Region', 'GpuInfo', 'SpotPrice'
17
+ ]
18
+
19
+
20
+ class HyperbolicCatalogError(Exception):
21
+ """Base exception for Hyperbolic catalog errors."""
22
+ pass
23
+
24
+
25
+ def get_api_key(api_key=None) -> str:
26
+ """Get API key from arg, env var, or file."""
27
+ if api_key:
28
+ return api_key
29
+ if api_key := os.environ.get('HYPERBOLIC_API_KEY'):
30
+ return api_key
31
+ try:
32
+ with open(API_KEY_PATH, 'r', encoding='utf-8') as f:
33
+ return f.read().strip()
34
+ except FileNotFoundError as exc:
35
+ raise HyperbolicCatalogError(
36
+ 'No API key found. Please either:\n'
37
+ '1. Pass --api-key\n'
38
+ '2. Set HYPERBOLIC_API_KEY environment variable\n'
39
+ '3. Create ~/.hyperbolic/api_key file') from exc
40
+
41
+
42
+ def get_output_path() -> str:
43
+ """Get output path for catalog file."""
44
+ current_dir = os.getcwd()
45
+ if os.path.basename(current_dir) == 'hyperbolic':
46
+ return 'vms.csv'
47
+ hyperbolic_dir = os.path.join(current_dir, 'hyperbolic')
48
+ os.makedirs(hyperbolic_dir, exist_ok=True)
49
+ return os.path.join(hyperbolic_dir, 'vms.csv')
50
+
51
+
52
+ def validate_instance_data(instance: Dict[str, Any]) -> None:
53
+ """Validate instance data has all required fields."""
54
+ missing_fields = [
55
+ field for field in REQUIRED_FIELDS if field not in instance
56
+ ]
57
+ if missing_fields:
58
+ raise HyperbolicCatalogError(
59
+ f'Instance data missing required fields: {missing_fields}')
60
+
61
+
62
+ def create_catalog(api_key=None) -> None:
63
+ """Generate Hyperbolic catalog CSV file."""
64
+ try:
65
+ response = requests.get(
66
+ ENDPOINT,
67
+ headers={'Authorization': f'Bearer {get_api_key(api_key)}'},
68
+ timeout=30)
69
+ response.raise_for_status()
70
+
71
+ try:
72
+ data = response.json()
73
+ except json.JSONDecodeError as e:
74
+ raise HyperbolicCatalogError(
75
+ f'Invalid JSON response from API: {response.text}') from e
76
+
77
+ if 'vms' not in data:
78
+ raise HyperbolicCatalogError(
79
+ f'Missing "vms" field in API response: {data}')
80
+
81
+ instances = data['vms']
82
+ if not isinstance(instances, list):
83
+ raise HyperbolicCatalogError(
84
+ f'Expected list of instances, got {type(instances)}')
85
+
86
+ if not instances:
87
+ raise HyperbolicCatalogError('No instances found in API response')
88
+
89
+ # Validate each instance
90
+ for instance in instances:
91
+ validate_instance_data(instance)
92
+
93
+ except requests.exceptions.RequestException as e:
94
+ raise HyperbolicCatalogError(
95
+ f'Failed to fetch instance data: {e}') from e
96
+
97
+ output_path = get_output_path()
98
+ try:
99
+ with open(output_path, 'w', newline='', encoding='utf-8') as f:
100
+ writer = csv.DictWriter(f, fieldnames=REQUIRED_FIELDS)
101
+ writer.writeheader()
102
+
103
+ for instance in instances:
104
+ entry = instance.copy()
105
+ # Convert GpuInfo to string format
106
+ entry['GpuInfo'] = json.dumps(entry['GpuInfo'],
107
+ ensure_ascii=False).replace(
108
+ '"', "'") # pylint: disable=invalid-string-quote
109
+ writer.writerow(entry)
110
+ except (IOError, OSError) as e:
111
+ raise HyperbolicCatalogError(
112
+ f'Failed to write catalog file to {output_path}: {e}') from e
113
+
114
+
115
+ def main() -> int:
116
+ """Main entry point."""
117
+ parser = argparse.ArgumentParser(
118
+ description='Fetch Hyperbolic instance data')
119
+ parser.add_argument('--api-key', help='Hyperbolic API key')
120
+ args = parser.parse_args()
121
+
122
+ try:
123
+ create_catalog(args.api_key)
124
+ print(f'Hyperbolic Service Catalog saved to {get_output_path()}')
125
+ return 0
126
+ except HyperbolicCatalogError as e:
127
+ print(f'Error: {e}', file=sys.stderr)
128
+ return 1
129
+ except (requests.exceptions.RequestException, json.JSONDecodeError, IOError,
130
+ OSError) as e:
131
+ print(f'Unexpected error: {e}', file=sys.stderr)
132
+ return 1
133
+
134
+
135
+ if __name__ == '__main__':
136
+ sys.exit(main())
@@ -0,0 +1,133 @@
1
+ """Hyperbolic Cloud service catalog.
2
+
3
+ This module loads and queries the service catalog for Hyperbolic Cloud.
4
+ """
5
+ from typing import Dict, List, Optional, Tuple, Union
6
+
7
+ from sky.catalog import common
8
+ from sky.clouds import cloud # Import cloud here for Region
9
+ from sky.utils import ux_utils
10
+
11
+ # Initialize cloud variable at module level
12
+ CLOUD = 'hyperbolic'
13
+
14
+ _df = common.read_catalog('hyperbolic/vms.csv')
15
+
16
+
17
+ def instance_type_exists(instance_type: str) -> bool:
18
+ return common.instance_type_exists_impl(_df, instance_type)
19
+
20
+
21
+ def validate_region_zone(
22
+ region: Optional[str],
23
+ zone: Optional[str]) -> Tuple[Optional[str], Optional[str]]:
24
+ if zone is not None:
25
+ with ux_utils.print_exception_no_traceback():
26
+ raise ValueError('Hyperbolic Cloud does not support zones.')
27
+ return common.validate_region_zone_impl('hyperbolic', _df, region, zone)
28
+
29
+
30
+ def get_hourly_cost(
31
+ instance_type: str,
32
+ use_spot: bool = False,
33
+ region: Optional[str] = None,
34
+ zone: Optional[str] = None,
35
+ ) -> float:
36
+ if zone is not None:
37
+ with ux_utils.print_exception_no_traceback():
38
+ raise ValueError('Hyperbolic Cloud does not support zones.')
39
+ return common.get_hourly_cost_impl(_df, instance_type, use_spot, region,
40
+ zone)
41
+
42
+
43
+ def get_vcpus_mem_from_instance_type(
44
+ instance_type: str,) -> Tuple[Optional[float], Optional[float]]:
45
+ return common.get_vcpus_mem_from_instance_type_impl(_df, instance_type)
46
+
47
+
48
+ def get_accelerators_from_instance_type(
49
+ instance_type: str) -> Optional[Dict[str, Union[int, float]]]:
50
+ return common.get_accelerators_from_instance_type_impl(_df, instance_type)
51
+
52
+
53
+ def get_vcpus_from_instance_type(instance_type: str) -> Optional[float]:
54
+ vcpus, _ = get_vcpus_mem_from_instance_type(instance_type)
55
+ return vcpus
56
+
57
+
58
+ def get_memory_from_instance_type(instance_type: str) -> Optional[float]:
59
+ _, mem = get_vcpus_mem_from_instance_type(instance_type)
60
+ return mem
61
+
62
+
63
+ def get_zone_shell_cmd() -> Optional[str]:
64
+ """Returns the shell command to obtain the zone."""
65
+ return None
66
+
67
+
68
+ def get_default_instance_type(cpus: Optional[str] = None,
69
+ memory: Optional[str] = None,
70
+ disk_tier: Optional[str] = None) -> Optional[str]:
71
+ del disk_tier # Unused
72
+ return common.get_instance_type_for_cpus_mem_impl(_df, cpus, memory)
73
+
74
+
75
+ def get_instance_type_for_accelerator(
76
+ acc_name: str,
77
+ acc_count: int,
78
+ cpus: Optional[str] = None,
79
+ memory: Optional[str] = None,
80
+ use_spot: bool = False,
81
+ region: Optional[str] = None,
82
+ zone: Optional[str] = None,
83
+ ) -> Tuple[Optional[List[str]], List[str]]:
84
+ if zone is not None:
85
+ with ux_utils.print_exception_no_traceback():
86
+ raise ValueError('Hyperbolic Cloud does not support zones.')
87
+ return common.get_instance_type_for_accelerator_impl(df=_df,
88
+ acc_name=acc_name,
89
+ acc_count=acc_count,
90
+ cpus=cpus,
91
+ memory=memory,
92
+ use_spot=use_spot,
93
+ region=region,
94
+ zone=zone)
95
+
96
+
97
+ def get_region_zones_for_instance_type(instance_type: str,
98
+ use_spot: bool) -> List[cloud.Region]:
99
+ df = _df[_df['InstanceType'] == instance_type]
100
+ return common.get_region_zones(df, use_spot)
101
+
102
+
103
+ def get_gen_version(instance_type: str) -> Optional[str]:
104
+ """Returns the generation version of the instance type."""
105
+ del instance_type # Unused
106
+ # TODO: Implement generation version detection
107
+ return None
108
+
109
+
110
+ def list_accelerators(
111
+ gpus_only: bool = True,
112
+ name_filter: Optional[str] = None,
113
+ region_filter: Optional[str] = None,
114
+ quantity_filter: Optional[int] = None,
115
+ case_sensitive: bool = True,
116
+ all_regions: bool = False,
117
+ require_price: bool = True,
118
+ ) -> Dict[str, List[common.InstanceTypeInfo]]:
119
+ """Returns all instance types in Hyperbolic Cloud offering accelerators."""
120
+ del require_price # Unused
121
+ return common.list_accelerators_impl('Hyperbolic', _df, gpus_only,
122
+ name_filter, region_filter,
123
+ quantity_filter, case_sensitive,
124
+ all_regions)
125
+
126
+
127
+ def get_instance_type_from_catalog() -> dict:
128
+ # TODO: Implement this function
129
+ return {}
130
+
131
+
132
+ def regions() -> List[cloud.Region]:
133
+ return [cloud.Region('default')]
@@ -19,6 +19,7 @@ from sky.clouds.cudo import Cudo
19
19
  from sky.clouds.do import DO
20
20
  from sky.clouds.fluidstack import Fluidstack
21
21
  from sky.clouds.gcp import GCP
22
+ from sky.clouds.hyperbolic import Hyperbolic
22
23
  from sky.clouds.ibm import IBM
23
24
  from sky.clouds.kubernetes import Kubernetes
24
25
  from sky.clouds.lambda_cloud import Lambda
@@ -56,6 +57,7 @@ __all__ = [
56
57
  'StatusVersion',
57
58
  'Fluidstack',
58
59
  'Nebius',
60
+ 'Hyperbolic',
59
61
  # Utility functions
60
62
  'cloud_in_iterable',
61
63
  ]
@@ -0,0 +1,276 @@
1
+ """Hyperbolic Cloud provider implementation
2
+ for SkyPilot.
3
+ """
4
+ import os
5
+ import typing
6
+ from typing import Any, Dict, List, Optional, Tuple, Union
7
+
8
+ from sky import catalog
9
+ from sky import clouds
10
+ from sky.utils import registry
11
+ from sky.utils import resources_utils
12
+ from sky.utils.resources_utils import DiskTier
13
+
14
+ if typing.TYPE_CHECKING:
15
+ from sky import resources as resources_lib
16
+
17
+
18
+ @registry.CLOUD_REGISTRY.register
19
+ class Hyperbolic(clouds.Cloud):
20
+ """Hyperbolic Cloud Provider."""
21
+
22
+ _REPR = 'Hyperbolic'
23
+ name = 'hyperbolic'
24
+ _MAX_CLUSTER_NAME_LEN_LIMIT = 120
25
+ API_KEY_PATH = os.path.expanduser('~/.hyperbolic/api_key')
26
+
27
+ _CLOUD_UNSUPPORTED_FEATURES = {
28
+ clouds.CloudImplementationFeatures.STOP: ('Stopping not supported.'),
29
+ clouds.CloudImplementationFeatures.MULTI_NODE:
30
+ ('Multi-node not supported.'),
31
+ clouds.CloudImplementationFeatures.CUSTOM_DISK_TIER:
32
+ ('Custom disk tiers not supported.'),
33
+ clouds.CloudImplementationFeatures.STORAGE_MOUNTING:
34
+ ('Storage mounting not supported.'),
35
+ clouds.CloudImplementationFeatures.HIGH_AVAILABILITY_CONTROLLERS:
36
+ ('High availability controllers not supported.'),
37
+ clouds.CloudImplementationFeatures.SPOT_INSTANCE:
38
+ ('Spot instances not supported.'),
39
+ clouds.CloudImplementationFeatures.CLONE_DISK_FROM_CLUSTER:
40
+ ('Disk cloning not supported.'),
41
+ clouds.CloudImplementationFeatures.DOCKER_IMAGE:
42
+ ('Docker images not supported.'),
43
+ clouds.CloudImplementationFeatures.OPEN_PORTS:
44
+ ('Opening ports not supported.'),
45
+ clouds.CloudImplementationFeatures.IMAGE_ID:
46
+ ('Custom image IDs not supported.'),
47
+ clouds.CloudImplementationFeatures.CUSTOM_NETWORK_TIER:
48
+ ('Custom network tiers not supported.'),
49
+ clouds.CloudImplementationFeatures.HOST_CONTROLLERS:
50
+ ('Host controllers not supported.'),
51
+ clouds.CloudImplementationFeatures.AUTO_TERMINATE:
52
+ ('Auto-termination not supported.'),
53
+ clouds.CloudImplementationFeatures.AUTOSTOP:
54
+ ('Auto-stop not supported.'),
55
+ clouds.CloudImplementationFeatures.AUTODOWN:
56
+ ('Auto-down not supported.'),
57
+ }
58
+
59
+ PROVISIONER_VERSION = clouds.ProvisionerVersion.SKYPILOT
60
+ STATUS_VERSION = clouds.StatusVersion.SKYPILOT
61
+ OPEN_PORTS_VERSION = clouds.OpenPortsVersion.LAUNCH_ONLY
62
+
63
+ @classmethod
64
+ def _unsupported_features_for_resources(
65
+ cls, resources: 'resources_lib.Resources'
66
+ ) -> Dict[clouds.CloudImplementationFeatures, str]:
67
+ del resources
68
+ return cls._CLOUD_UNSUPPORTED_FEATURES
69
+
70
+ @classmethod
71
+ def _max_cluster_name_length(cls) -> Optional[int]:
72
+ return cls._MAX_CLUSTER_NAME_LEN_LIMIT
73
+
74
+ def instance_type_exists(self, instance_type: str) -> bool:
75
+ return catalog.instance_type_exists(instance_type, 'hyperbolic')
76
+
77
+ @classmethod
78
+ def regions_with_offering(cls, instance_type: str,
79
+ accelerators: Optional[Dict[str, int]],
80
+ use_spot: bool, region: Optional[str],
81
+ zone: Optional[str]) -> List[clouds.Region]:
82
+ assert zone is None, 'Hyperbolic does not support zones.'
83
+ del accelerators, zone # unused
84
+
85
+ regions = catalog.get_region_zones_for_instance_type(
86
+ instance_type, use_spot, 'hyperbolic')
87
+ if region is not None:
88
+ regions = [r for r in regions if r.name == region]
89
+ return regions
90
+
91
+ @classmethod
92
+ def get_vcpus_mem_from_instance_type(
93
+ cls, instance_type: str) -> Tuple[Optional[float], Optional[float]]:
94
+ return catalog.get_vcpus_mem_from_instance_type(instance_type,
95
+ clouds='hyperbolic')
96
+
97
+ def instance_type_to_hourly_cost(self,
98
+ instance_type: str,
99
+ use_spot: bool,
100
+ region: Optional[str] = None,
101
+ zone: Optional[str] = None) -> float:
102
+ return catalog.get_hourly_cost(instance_type,
103
+ use_spot=use_spot,
104
+ region=region,
105
+ zone=zone,
106
+ clouds='hyperbolic')
107
+
108
+ @classmethod
109
+ def get_default_instance_type(
110
+ cls,
111
+ cpus: Optional[str] = None,
112
+ memory: Optional[str] = None,
113
+ disk_tier: Optional[DiskTier] = None) -> Optional[str]:
114
+ return catalog.get_default_instance_type(cpus=cpus,
115
+ memory=memory,
116
+ disk_tier=disk_tier,
117
+ clouds='hyperbolic')
118
+
119
+ @classmethod
120
+ def get_accelerators_from_instance_type(
121
+ cls, instance_type: str) -> Optional[Dict[str, Union[int, float]]]:
122
+ return catalog.get_accelerators_from_instance_type(instance_type,
123
+ clouds='hyperbolic')
124
+
125
+ @classmethod
126
+ def _check_credentials(cls) -> Tuple[bool, Optional[str]]:
127
+ if os.path.exists(cls.API_KEY_PATH):
128
+ return True, None
129
+ return False, f'API key not found at {cls.API_KEY_PATH}'
130
+
131
+ @classmethod
132
+ def _check_compute_credentials(cls) -> Tuple[bool, Optional[str]]:
133
+ return cls._check_credentials()
134
+
135
+ @classmethod
136
+ def get_credential_file_mounts(cls) -> Dict[str, str]:
137
+ if os.path.exists(cls.API_KEY_PATH):
138
+ return {cls.API_KEY_PATH: '~/.hyperbolic/api_key'}
139
+ return {}
140
+
141
+ def __repr__(self):
142
+ return self._REPR
143
+
144
+ def _get_feasible_launchable_resources(
145
+ self, resources: 'resources_lib.Resources'
146
+ ) -> 'resources_utils.FeasibleResources':
147
+ # Check if the instance type exists in the catalog
148
+ if resources.instance_type is not None:
149
+ if catalog.instance_type_exists(resources.instance_type,
150
+ 'hyperbolic'):
151
+ # Remove accelerators for launchable resources
152
+ resources_launch = resources.copy(accelerators=None)
153
+ return resources_utils.FeasibleResources([resources_launch], [],
154
+ None)
155
+ else:
156
+ raise ValueError(
157
+ f'Invalid instance type: {resources.instance_type}')
158
+
159
+ # If accelerators are specified
160
+ accelerators = resources.accelerators
161
+ if accelerators is not None:
162
+ assert len(accelerators) == 1, resources
163
+ acc, acc_count = list(accelerators.items())[0]
164
+ (instance_list,
165
+ fuzzy_candidate_list) = catalog.get_instance_type_for_accelerator(
166
+ acc,
167
+ acc_count,
168
+ use_spot=resources.use_spot,
169
+ cpus=resources.cpus,
170
+ memory=resources.memory,
171
+ region=resources.region,
172
+ zone=resources.zone,
173
+ clouds='hyperbolic')
174
+ if instance_list is None:
175
+ return resources_utils.FeasibleResources([],
176
+ fuzzy_candidate_list,
177
+ None)
178
+
179
+ def _make(instance_list):
180
+ resource_list = []
181
+ for instance_type in instance_list:
182
+ r = resources.copy(
183
+ cloud=self,
184
+ instance_type=instance_type,
185
+ accelerators=None,
186
+ cpus=None,
187
+ memory=None,
188
+ )
189
+ resource_list.append(r)
190
+ return resource_list
191
+
192
+ return resources_utils.FeasibleResources(_make(instance_list),
193
+ fuzzy_candidate_list, None)
194
+
195
+ # If nothing is specified, return a default instance type
196
+ default_instance_type = self.get_default_instance_type(
197
+ cpus=resources.cpus,
198
+ memory=resources.memory,
199
+ disk_tier=resources.disk_tier)
200
+ if default_instance_type is None:
201
+ return resources_utils.FeasibleResources([], [], None)
202
+ else:
203
+ r = resources.copy(
204
+ cloud=self,
205
+ instance_type=default_instance_type,
206
+ accelerators=None,
207
+ cpus=None,
208
+ memory=None,
209
+ )
210
+ return resources_utils.FeasibleResources([r], [], None)
211
+
212
+ def validate_region_zone(
213
+ self, region: Optional[str],
214
+ zone: Optional[str]) -> Tuple[Optional[str], Optional[str]]:
215
+ if zone is not None:
216
+ raise ValueError('Hyperbolic does not support zones.')
217
+ return catalog.validate_region_zone(region, zone, 'hyperbolic')
218
+
219
+ @classmethod
220
+ def regions(cls) -> List[clouds.Region]:
221
+ """Returns the list of regions in Hyperbolic's catalog."""
222
+ return catalog.regions('hyperbolic')
223
+
224
+ @classmethod
225
+ def zones_provision_loop(cls,
226
+ *,
227
+ region: str,
228
+ num_nodes: int,
229
+ instance_type: str,
230
+ accelerators: Optional[Dict[str, int]] = None,
231
+ use_spot: bool = False):
232
+ yield None
233
+
234
+ @classmethod
235
+ def get_zone_shell_cmd(cls) -> Optional[str]:
236
+ return None
237
+
238
+ def get_egress_cost(self, num_gigabytes: float):
239
+ return 0.0
240
+
241
+ def accelerators_to_hourly_cost(self, accelerators: Dict[str, int],
242
+ use_spot: bool, region: Optional[str],
243
+ zone: Optional[str]) -> float:
244
+ return 0.0
245
+
246
+ def make_deploy_resources_variables(
247
+ self,
248
+ resources: 'resources_lib.Resources',
249
+ cluster_name: resources_utils.ClusterName,
250
+ region: 'clouds.Region',
251
+ zones: Optional[List['clouds.Zone']],
252
+ num_nodes: int,
253
+ dryrun: bool = False) -> Dict[str, Any]:
254
+ """Returns a dict of variables for the deployment template."""
255
+ del dryrun, region, cluster_name # unused
256
+ assert zones is None, ('Hyperbolic does not support zones', zones)
257
+
258
+ resources = resources.assert_launchable()
259
+ # resources.accelerators is cleared but .instance_type encodes the info.
260
+ acc_dict = self.get_accelerators_from_instance_type(
261
+ resources.instance_type)
262
+ custom_resources = resources_utils.make_ray_custom_resources_str(
263
+ acc_dict)
264
+
265
+ return {
266
+ 'instance_type': resources.instance_type,
267
+ 'custom_resources': custom_resources,
268
+ 'num_nodes': 1, # Hyperbolic only supports single-node clusters
269
+ }
270
+
271
+ def cluster_name_in_hint(self, cluster_name_on_cloud: Optional[str],
272
+ cluster_name: str) -> bool:
273
+ """Check if a node's name matches the cluster name pattern."""
274
+ if cluster_name_on_cloud is None:
275
+ return False
276
+ return cluster_name_on_cloud.startswith(cluster_name)