skypilot-nightly 1.0.0.dev20250812__py3-none-any.whl → 1.0.0.dev20250815__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (179) hide show
  1. sky/__init__.py +4 -2
  2. sky/adaptors/nebius.py +43 -1
  3. sky/backends/backend_utils.py +74 -7
  4. sky/backends/cloud_vm_ray_backend.py +169 -29
  5. sky/catalog/cudo_catalog.py +1 -1
  6. sky/catalog/data_fetchers/fetch_cudo.py +1 -1
  7. sky/catalog/data_fetchers/fetch_nebius.py +6 -3
  8. sky/client/cli/command.py +62 -85
  9. sky/client/common.py +1 -1
  10. sky/client/sdk.py +69 -19
  11. sky/client/sdk_async.py +5 -4
  12. sky/clouds/aws.py +52 -1
  13. sky/clouds/kubernetes.py +15 -5
  14. sky/clouds/nebius.py +3 -1
  15. sky/dag.py +1 -0
  16. sky/dashboard/out/404.html +1 -1
  17. sky/dashboard/out/_next/static/I-djf3wB8zZl_bI67BOyZ/_buildManifest.js +1 -0
  18. sky/dashboard/out/_next/static/chunks/1141-a96678fed5043c12.js +1 -0
  19. sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +1 -0
  20. sky/dashboard/out/_next/static/chunks/3015-77d22ae2fad4071c.js +1 -0
  21. sky/dashboard/out/_next/static/chunks/3785.8ce85b31e5c602e9.js +1 -0
  22. sky/dashboard/out/_next/static/chunks/4045.b30465273dc5e468.js +21 -0
  23. sky/dashboard/out/_next/static/chunks/4509-fa63866741388427.js +1 -0
  24. sky/dashboard/out/_next/static/chunks/4676-9da7fdbde90b5549.js +10 -0
  25. sky/dashboard/out/_next/static/chunks/4725.68d5ce4d6bcb7991.js +1 -0
  26. sky/dashboard/out/_next/static/chunks/6014.d466a44b73af8348.js +6 -0
  27. sky/dashboard/out/_next/static/chunks/{6135-85426374db04811e.js → 6135-4b4d5e824b7f9d3c.js} +1 -1
  28. sky/dashboard/out/_next/static/chunks/6633-efe924b9b8136699.js +40 -0
  29. sky/dashboard/out/_next/static/chunks/6856-58370d8c9a79f72b.js +1 -0
  30. sky/dashboard/out/_next/static/chunks/{6989-6129c1cfbcf51063.js → 6989-01359c57e018caa4.js} +1 -1
  31. sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +1 -0
  32. sky/dashboard/out/_next/static/chunks/7325.b4bc99ce0892dcd5.js +6 -0
  33. sky/dashboard/out/_next/static/chunks/754-d0da8ab45f9509e9.js +18 -0
  34. sky/dashboard/out/_next/static/chunks/7557-5855617d0421ed55.js +1 -0
  35. sky/dashboard/out/_next/static/chunks/8310.4ae62d5937045bf3.js +31 -0
  36. sky/dashboard/out/_next/static/chunks/8838.e7953f42af2b0544.js +45 -0
  37. sky/dashboard/out/_next/static/chunks/8969-6d493b1e2fa45826.js +1 -0
  38. sky/dashboard/out/_next/static/chunks/{1871-980a395e92633a5c.js → 9037-f71c3c42670a4be0.js} +2 -2
  39. sky/dashboard/out/_next/static/chunks/9277.71481d5b2e606e33.js +51 -0
  40. sky/dashboard/out/_next/static/chunks/pages/{_app-491a4d699d95e808.js → _app-ce361c6959bc2001.js} +2 -2
  41. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/{[job]-078751bad714c017.js → [job]-6d43d6a6bd1d4c77.js} +2 -2
  42. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-30c5954a7b1f67d7.js +16 -0
  43. sky/dashboard/out/_next/static/chunks/pages/clusters-fa94c3548b5834aa.js +1 -0
  44. sky/dashboard/out/_next/static/chunks/pages/infra/{[context]-13d53fffc03ccb52.js → [context]-5264c5645299cde9.js} +1 -1
  45. sky/dashboard/out/_next/static/chunks/pages/{infra-fc9222e26c8e2f0d.js → infra-83991650ae4bd083.js} +1 -1
  46. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-ad2cd5aab787bc15.js +6 -0
  47. sky/dashboard/out/_next/static/chunks/pages/jobs/pools/{[pool]-f5ccf5d39d87aebe.js → [pool]-7d4182df6625fe10.js} +2 -7
  48. sky/dashboard/out/_next/static/chunks/pages/jobs-c6a6a8a737ad7e2d.js +1 -0
  49. sky/dashboard/out/_next/static/chunks/pages/users-d112a9b3d854abb2.js +1 -0
  50. sky/dashboard/out/_next/static/chunks/pages/volumes-b87fec189298a0c0.js +1 -0
  51. sky/dashboard/out/_next/static/chunks/pages/workspaces/{[name]-f72f73bcef9541dc.js → [name]-8a86ca4c98812df9.js} +1 -1
  52. sky/dashboard/out/_next/static/chunks/pages/workspaces-74ef46fc370f7c71.js +1 -0
  53. sky/dashboard/out/_next/static/chunks/webpack-aba778a6d6eb496d.js +1 -0
  54. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  55. sky/dashboard/out/clusters/[cluster].html +1 -1
  56. sky/dashboard/out/clusters.html +1 -1
  57. sky/dashboard/out/config.html +1 -1
  58. sky/dashboard/out/index.html +1 -1
  59. sky/dashboard/out/infra/[context].html +1 -1
  60. sky/dashboard/out/infra.html +1 -1
  61. sky/dashboard/out/jobs/[job].html +1 -1
  62. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  63. sky/dashboard/out/jobs.html +1 -1
  64. sky/dashboard/out/users.html +1 -1
  65. sky/dashboard/out/volumes.html +1 -1
  66. sky/dashboard/out/workspace/new.html +1 -1
  67. sky/dashboard/out/workspaces/[name].html +1 -1
  68. sky/dashboard/out/workspaces.html +1 -1
  69. sky/data/storage.py +11 -1
  70. sky/exceptions.py +5 -0
  71. sky/execution.py +13 -10
  72. sky/global_user_state.py +191 -8
  73. sky/jobs/constants.py +1 -1
  74. sky/jobs/controller.py +0 -1
  75. sky/jobs/recovery_strategy.py +3 -3
  76. sky/jobs/scheduler.py +35 -87
  77. sky/jobs/server/core.py +82 -22
  78. sky/jobs/server/utils.py +1 -1
  79. sky/jobs/state.py +7 -5
  80. sky/jobs/utils.py +167 -8
  81. sky/provision/__init__.py +1 -0
  82. sky/provision/aws/config.py +25 -0
  83. sky/provision/aws/instance.py +37 -13
  84. sky/provision/azure/instance.py +2 -0
  85. sky/provision/cudo/cudo_wrapper.py +1 -1
  86. sky/provision/cudo/instance.py +2 -0
  87. sky/provision/do/instance.py +2 -0
  88. sky/provision/fluidstack/instance.py +2 -0
  89. sky/provision/gcp/instance.py +2 -0
  90. sky/provision/hyperbolic/instance.py +2 -1
  91. sky/provision/kubernetes/instance.py +133 -0
  92. sky/provision/lambda_cloud/instance.py +2 -0
  93. sky/provision/nebius/instance.py +2 -0
  94. sky/provision/nebius/utils.py +101 -86
  95. sky/provision/oci/instance.py +2 -0
  96. sky/provision/paperspace/instance.py +2 -1
  97. sky/provision/paperspace/utils.py +1 -1
  98. sky/provision/provisioner.py +13 -8
  99. sky/provision/runpod/instance.py +2 -0
  100. sky/provision/runpod/utils.py +1 -1
  101. sky/provision/scp/instance.py +2 -0
  102. sky/provision/vast/instance.py +2 -0
  103. sky/provision/vsphere/instance.py +2 -0
  104. sky/resources.py +6 -7
  105. sky/schemas/__init__.py +0 -0
  106. sky/schemas/api/__init__.py +0 -0
  107. sky/schemas/api/responses.py +70 -0
  108. sky/schemas/db/global_user_state/006_provision_log.py +41 -0
  109. sky/schemas/generated/__init__.py +0 -0
  110. sky/schemas/generated/autostopv1_pb2.py +36 -0
  111. sky/schemas/generated/autostopv1_pb2.pyi +43 -0
  112. sky/schemas/generated/autostopv1_pb2_grpc.py +146 -0
  113. sky/serve/constants.py +3 -7
  114. sky/serve/replica_managers.py +138 -117
  115. sky/serve/serve_state.py +42 -0
  116. sky/serve/serve_utils.py +58 -36
  117. sky/serve/server/impl.py +15 -19
  118. sky/serve/service.py +82 -33
  119. sky/server/constants.py +1 -1
  120. sky/server/requests/payloads.py +6 -0
  121. sky/server/requests/serializers/decoders.py +12 -2
  122. sky/server/requests/serializers/encoders.py +10 -2
  123. sky/server/server.py +64 -16
  124. sky/setup_files/dependencies.py +11 -10
  125. sky/skylet/autostop_lib.py +38 -5
  126. sky/skylet/constants.py +3 -1
  127. sky/skylet/services.py +44 -0
  128. sky/skylet/skylet.py +49 -4
  129. sky/task.py +19 -16
  130. sky/templates/aws-ray.yml.j2 +2 -2
  131. sky/templates/jobs-controller.yaml.j2 +6 -0
  132. sky/templates/kubernetes-ray.yml.j2 +1 -0
  133. sky/utils/command_runner.py +1 -1
  134. sky/utils/common_utils.py +20 -0
  135. sky/utils/config_utils.py +29 -5
  136. sky/utils/controller_utils.py +86 -0
  137. sky/utils/db/db_utils.py +17 -0
  138. sky/utils/db/migration_utils.py +1 -1
  139. sky/utils/log_utils.py +14 -5
  140. sky/utils/resources_utils.py +25 -1
  141. sky/utils/schemas.py +6 -0
  142. sky/utils/ux_utils.py +36 -5
  143. sky/volumes/server/core.py +2 -2
  144. sky/volumes/server/server.py +2 -2
  145. {skypilot_nightly-1.0.0.dev20250812.dist-info → skypilot_nightly-1.0.0.dev20250815.dist-info}/METADATA +5 -7
  146. {skypilot_nightly-1.0.0.dev20250812.dist-info → skypilot_nightly-1.0.0.dev20250815.dist-info}/RECORD +151 -142
  147. sky/dashboard/out/_next/static/Fuy7OzApYTUMz2QgoP7dP/_buildManifest.js +0 -1
  148. sky/dashboard/out/_next/static/chunks/1141-a8a8f1adba34c892.js +0 -11
  149. sky/dashboard/out/_next/static/chunks/1559-6c00e20454194859.js +0 -30
  150. sky/dashboard/out/_next/static/chunks/2369.fc20f0c2c8ed9fe7.js +0 -15
  151. sky/dashboard/out/_next/static/chunks/2641.142718b6b78a6f9b.js +0 -1
  152. sky/dashboard/out/_next/static/chunks/3785.6003d293cb83eab4.js +0 -1
  153. sky/dashboard/out/_next/static/chunks/4725.29550342bd53afd8.js +0 -1
  154. sky/dashboard/out/_next/static/chunks/4937.a2baa2df5572a276.js +0 -15
  155. sky/dashboard/out/_next/static/chunks/6212-7bd06f60ba693125.js +0 -13
  156. sky/dashboard/out/_next/static/chunks/6601-06114c982db410b6.js +0 -1
  157. sky/dashboard/out/_next/static/chunks/691.5eeedf82cc243343.js +0 -55
  158. sky/dashboard/out/_next/static/chunks/6990-0f886f16e0d55ff8.js +0 -1
  159. sky/dashboard/out/_next/static/chunks/8056-5bdeda81199c0def.js +0 -1
  160. sky/dashboard/out/_next/static/chunks/8252.62b0d23aed618bb2.js +0 -16
  161. sky/dashboard/out/_next/static/chunks/8969-c9686994ddafcf01.js +0 -1
  162. sky/dashboard/out/_next/static/chunks/9159-11421c0f2909236f.js +0 -1
  163. sky/dashboard/out/_next/static/chunks/9360.85b0b1b4054574dd.js +0 -31
  164. sky/dashboard/out/_next/static/chunks/9666.cd4273f2a5c5802c.js +0 -1
  165. sky/dashboard/out/_next/static/chunks/9847.757720f3b40c0aa5.js +0 -30
  166. sky/dashboard/out/_next/static/chunks/9984.c5564679e467d245.js +0 -1
  167. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-da9cc0901349c2e9.js +0 -1
  168. sky/dashboard/out/_next/static/chunks/pages/clusters-b30460f683e6ba96.js +0 -1
  169. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-154f55cf8af55be5.js +0 -11
  170. sky/dashboard/out/_next/static/chunks/pages/jobs-cdc60fb5d371e16a.js +0 -1
  171. sky/dashboard/out/_next/static/chunks/pages/users-7ed36e44e779d5c7.js +0 -1
  172. sky/dashboard/out/_next/static/chunks/pages/volumes-c9695d657f78b5dc.js +0 -1
  173. sky/dashboard/out/_next/static/chunks/pages/workspaces-8f67be60165724cc.js +0 -1
  174. sky/dashboard/out/_next/static/chunks/webpack-7fd0cf9dbecff10f.js +0 -1
  175. /sky/dashboard/out/_next/static/{Fuy7OzApYTUMz2QgoP7dP → I-djf3wB8zZl_bI67BOyZ}/_ssgManifest.js +0 -0
  176. {skypilot_nightly-1.0.0.dev20250812.dist-info → skypilot_nightly-1.0.0.dev20250815.dist-info}/WHEEL +0 -0
  177. {skypilot_nightly-1.0.0.dev20250812.dist-info → skypilot_nightly-1.0.0.dev20250815.dist-info}/entry_points.txt +0 -0
  178. {skypilot_nightly-1.0.0.dev20250812.dist-info → skypilot_nightly-1.0.0.dev20250815.dist-info}/licenses/LICENSE +0 -0
  179. {skypilot_nightly-1.0.0.dev20250812.dist-info → skypilot_nightly-1.0.0.dev20250815.dist-info}/top_level.txt +0 -0
sky/utils/log_utils.py CHANGED
@@ -47,13 +47,16 @@ class RayUpLineProcessor(LineProcessor):
47
47
  RUNTIME_SETUP = 1
48
48
  PULLING_DOCKER_IMAGES = 2
49
49
 
50
- def __init__(self, log_path: str):
50
+ def __init__(self, log_path: str, cluster_name: Optional[str] = None):
51
51
  self.log_path = log_path
52
+ self.cluster_name = cluster_name
52
53
 
53
54
  def __enter__(self) -> None:
54
55
  self.state = self.ProvisionStatus.LAUNCH
55
56
  self.status_display = rich_utils.safe_status(
56
- ux_utils.spinner_message('Launching', self.log_path))
57
+ ux_utils.spinner_message('Launching',
58
+ self.log_path,
59
+ cluster_name=self.cluster_name))
57
60
  self.status_display.start()
58
61
 
59
62
  def process_line(self, log_line: str) -> None:
@@ -62,19 +65,25 @@ class RayUpLineProcessor(LineProcessor):
62
65
  logger.info(' Head VM is up.')
63
66
  self.status_display.update(
64
67
  ux_utils.spinner_message(
65
- 'Launching - Preparing SkyPilot runtime', self.log_path))
68
+ 'Launching - Preparing SkyPilot runtime',
69
+ self.log_path,
70
+ cluster_name=self.cluster_name))
66
71
  self.state = self.ProvisionStatus.RUNTIME_SETUP
67
72
  if ('Pulling from' in log_line and
68
73
  self.state == self.ProvisionStatus.RUNTIME_SETUP):
69
74
  self.status_display.update(
70
75
  ux_utils.spinner_message(
71
- 'Launching - Initializing docker container', self.log_path))
76
+ 'Launching - Initializing docker container',
77
+ self.log_path,
78
+ cluster_name=self.cluster_name))
72
79
  self.state = self.ProvisionStatus.PULLING_DOCKER_IMAGES
73
80
  if ('Status: Downloaded newer image' in log_line and
74
81
  self.state == self.ProvisionStatus.PULLING_DOCKER_IMAGES):
75
82
  self.status_display.update(
76
83
  ux_utils.spinner_message(
77
- 'Launching - Preparing SkyPilot runtime', self.log_path))
84
+ 'Launching - Preparing SkyPilot runtime',
85
+ self.log_path,
86
+ cluster_name=self.cluster_name))
78
87
  self.state = self.ProvisionStatus.RUNTIME_SETUP
79
88
 
80
89
  def __exit__(self, except_type: Optional[Type[BaseException]],
@@ -5,7 +5,7 @@ import itertools
5
5
  import json
6
6
  import math
7
7
  import typing
8
- from typing import Dict, List, Optional, Set, Union
8
+ from typing import Any, Dict, List, Optional, Set, Tuple, Union
9
9
 
10
10
  from sky import skypilot_config
11
11
  from sky.skylet import constants
@@ -435,3 +435,27 @@ def parse_time_minutes(time: str) -> int:
435
435
  continue
436
436
 
437
437
  raise ValueError(f'Invalid time format: {time}')
438
+
439
+
440
+ def normalize_any_of_resources_config(
441
+ any_of: List[Dict[str, Any]]) -> Tuple[str, ...]:
442
+ """Normalize a list of any_of resources config to a canonical form.
443
+
444
+ Args:
445
+ any_of: A list of any_of resources config.
446
+
447
+ Returns:
448
+ A normalized tuple representation that can be compared for equality.
449
+ Two lists with the same resource configurations in different orders
450
+ will produce the same normalized result.
451
+ """
452
+ if not any_of:
453
+ return tuple()
454
+
455
+ # Convert each config to JSON string with sorted keys, then sort the list
456
+ normalized_configs = [
457
+ json.dumps(config, sort_keys=True, separators=(',', ':'))
458
+ for config in any_of
459
+ ]
460
+
461
+ return tuple(sorted(normalized_configs))
sky/utils/schemas.py CHANGED
@@ -1205,6 +1205,9 @@ def get_config_schema():
1205
1205
  'disk_encrypted': {
1206
1206
  'type': 'boolean',
1207
1207
  },
1208
+ 'ssh_user': {
1209
+ 'type': 'string',
1210
+ },
1208
1211
  'security_group_name':
1209
1212
  (_PROPERTY_NAME_OR_CLUSTER_NAME_TO_PROPERTY),
1210
1213
  'vpc_name': {
@@ -1532,6 +1535,9 @@ def get_config_schema():
1532
1535
  'requests_retention_hours': {
1533
1536
  'type': 'integer',
1534
1537
  },
1538
+ 'cluster_event_retention_hours': {
1539
+ 'type': 'number',
1540
+ },
1535
1541
  }
1536
1542
  }
1537
1543
 
sky/utils/ux_utils.py CHANGED
@@ -26,9 +26,16 @@ BOLD = '\033[1m'
26
26
  RESET_BOLD = '\033[0m'
27
27
 
28
28
  # Log path hint in the spinner during launching
29
+ # (old, kept for backward compatibility)
29
30
  _LOG_PATH_HINT = (f'{colorama.Style.DIM}View logs: sky api logs -l '
30
31
  '{log_path}'
31
32
  f'{colorama.Style.RESET_ALL}')
33
+ # Log hint: recommend sky logs --provision <cluster_name>
34
+ _PROVISION_LOG_HINT = (
35
+ f'{colorama.Style.DIM}View logs: '
36
+ f'{BOLD}sky logs --provision {{cluster_name}}{RESET_BOLD}'
37
+ f'{colorama.Style.RESET_ALL}')
38
+ # Legacy path hint retained for local-only cases where we don't have cluster
32
39
  _LOG_PATH_HINT_LOCAL = (f'{colorama.Style.DIM}View logs: '
33
40
  '{log_path}'
34
41
  f'{colorama.Style.RESET_ALL}')
@@ -126,7 +133,10 @@ class RedirectOutputForProcess:
126
133
 
127
134
  def log_path_hint(log_path: Union[str, 'pathlib.Path'],
128
135
  is_local: bool = False) -> str:
129
- """Gets the log path hint for the given log path."""
136
+ """Gets the log path hint for the given log path.
137
+
138
+ Kept for backward compatibility when only paths are available.
139
+ """
130
140
  log_path = str(log_path)
131
141
  expanded_home = os.path.expanduser('~')
132
142
  if log_path.startswith(expanded_home):
@@ -139,6 +149,12 @@ def log_path_hint(log_path: Union[str, 'pathlib.Path'],
139
149
  return _LOG_PATH_HINT.format(log_path=log_path)
140
150
 
141
151
 
152
+ def provision_hint(cluster_name: Optional[str]) -> Optional[str]:
153
+ if not cluster_name:
154
+ return None
155
+ return _PROVISION_LOG_HINT.format(cluster_name=cluster_name)
156
+
157
+
142
158
  def starting_message(message: str) -> str:
143
159
  """Gets the starting message for the given message."""
144
160
  # We have to reset the color before the message, because sometimes if a
@@ -150,7 +166,8 @@ def starting_message(message: str) -> str:
150
166
  def finishing_message(message: str,
151
167
  log_path: Optional[Union[str, 'pathlib.Path']] = None,
152
168
  is_local: bool = False,
153
- follow_up_message: Optional[str] = None) -> str:
169
+ follow_up_message: Optional[str] = None,
170
+ cluster_name: Optional[str] = None) -> str:
154
171
  """Gets the finishing message for the given message.
155
172
 
156
173
  Args:
@@ -168,6 +185,9 @@ def finishing_message(message: str,
168
185
  success_prefix = (f'{colorama.Style.RESET_ALL}{colorama.Fore.GREEN}✓ '
169
186
  f'{message}{colorama.Style.RESET_ALL}{follow_up_message}'
170
187
  f'{colorama.Style.RESET_ALL}')
188
+ hint = provision_hint(cluster_name)
189
+ if hint:
190
+ return f'{success_prefix} {hint}'
171
191
  if log_path is None:
172
192
  return success_prefix
173
193
  path_hint = log_path_hint(log_path, is_local)
@@ -176,13 +196,17 @@ def finishing_message(message: str,
176
196
 
177
197
  def error_message(message: str,
178
198
  log_path: Optional[Union[str, 'pathlib.Path']] = None,
179
- is_local: bool = False) -> str:
199
+ is_local: bool = False,
200
+ cluster_name: Optional[str] = None) -> str:
180
201
  """Gets the error message for the given message."""
181
202
  # We have to reset the color before the message, because sometimes if a
182
203
  # previous spinner with dimmed color overflows in a narrow terminal, the
183
204
  # color might be messed up.
184
205
  error_prefix = (f'{colorama.Style.RESET_ALL}{colorama.Fore.RED}⨯'
185
206
  f'{colorama.Style.RESET_ALL} {message}')
207
+ hint = provision_hint(cluster_name)
208
+ if hint:
209
+ return f'{error_prefix} {hint}'
186
210
  if log_path is None:
187
211
  return error_prefix
188
212
  path_hint = log_path_hint(log_path, is_local)
@@ -200,9 +224,16 @@ def retry_message(message: str) -> str:
200
224
 
201
225
  def spinner_message(message: str,
202
226
  log_path: Optional[Union[str, 'pathlib.Path']] = None,
203
- is_local: bool = False) -> str:
204
- """Gets the spinner message for the given message and log path."""
227
+ is_local: bool = False,
228
+ cluster_name: Optional[str] = None) -> str:
229
+ """Gets the spinner message for the given message and log path.
230
+
231
+ If cluster_name is provided, recommend `sky logs --provision <cluster>`.
232
+ """
205
233
  colored_spinner = f'[bold cyan]{message}[/]'
234
+ hint = provision_hint(cluster_name)
235
+ if hint:
236
+ return f'{colored_spinner} {hint}'
206
237
  if log_path is None:
207
238
  return colored_spinner
208
239
  path_hint = log_path_hint(log_path, is_local)
@@ -7,12 +7,12 @@ import uuid
7
7
 
8
8
  import filelock
9
9
 
10
- import sky
11
10
  from sky import global_user_state
12
11
  from sky import models
13
12
  from sky import provision
14
13
  from sky import sky_logging
15
14
  from sky.utils import common_utils
15
+ from sky.utils import registry
16
16
  from sky.utils import rich_utils
17
17
  from sky.utils import status_lib
18
18
  from sky.utils import ux_utils
@@ -180,7 +180,7 @@ def volume_apply(name: str, volume_type: str, cloud: str, region: Optional[str],
180
180
  with rich_utils.safe_status(ux_utils.spinner_message('Creating volume')):
181
181
  # Reuse the method for cluster name on cloud to
182
182
  # generate the storage name on cloud.
183
- cloud_obj = sky.CLOUD_REGISTRY.from_str(cloud)
183
+ cloud_obj = registry.CLOUD_REGISTRY.from_str(cloud)
184
184
  assert cloud_obj is not None
185
185
  name_uuid = str(uuid.uuid4())[:6]
186
186
  name_on_cloud = common_utils.make_cluster_name_on_cloud(
@@ -2,12 +2,12 @@
2
2
 
3
3
  import fastapi
4
4
 
5
- import sky
6
5
  from sky import clouds
7
6
  from sky import sky_logging
8
7
  from sky.server.requests import executor
9
8
  from sky.server.requests import payloads
10
9
  from sky.server.requests import requests as requests_lib
10
+ from sky.utils import registry
11
11
  from sky.utils import volume
12
12
  from sky.volumes.server import core
13
13
 
@@ -55,7 +55,7 @@ async def volume_apply(request: fastapi.Request,
55
55
  if volume_type not in supported_volume_types:
56
56
  raise fastapi.HTTPException(
57
57
  status_code=400, detail=f'Invalid volume type: {volume_type}')
58
- cloud = sky.CLOUD_REGISTRY.from_str(volume_cloud)
58
+ cloud = registry.CLOUD_REGISTRY.from_str(volume_cloud)
59
59
  if cloud is None:
60
60
  raise fastapi.HTTPException(status_code=400,
61
61
  detail=f'Invalid cloud: {volume_cloud}')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250812
3
+ Version: 1.0.0.dev20250815
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -104,9 +104,8 @@ Provides-Extra: ssh
104
104
  Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "ssh"
105
105
  Requires-Dist: websockets; extra == "ssh"
106
106
  Provides-Extra: remote
107
- Requires-Dist: grpcio!=1.48.0,>=1.32.0; python_version < "3.10" and extra == "remote"
108
- Requires-Dist: grpcio!=1.48.0,>=1.42.0; python_version >= "3.10" and extra == "remote"
109
- Requires-Dist: protobuf!=3.19.5,>=3.15.3; extra == "remote"
107
+ Requires-Dist: grpcio>=1.63.0; extra == "remote"
108
+ Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "remote"
110
109
  Provides-Extra: runpod
111
110
  Requires-Dist: runpod>=1.6.1; extra == "runpod"
112
111
  Provides-Extra: fluidstack
@@ -169,9 +168,8 @@ Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
169
168
  Requires-Dist: websockets; extra == "all"
170
169
  Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
171
170
  Requires-Dist: websockets; extra == "all"
172
- Requires-Dist: grpcio!=1.48.0,>=1.32.0; python_version < "3.10" and extra == "all"
173
- Requires-Dist: grpcio!=1.48.0,>=1.42.0; python_version >= "3.10" and extra == "all"
174
- Requires-Dist: protobuf!=3.19.5,>=3.15.3; extra == "all"
171
+ Requires-Dist: grpcio>=1.63.0; extra == "all"
172
+ Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
175
173
  Requires-Dist: runpod>=1.6.1; extra == "all"
176
174
  Requires-Dist: cudo-compute>=0.1.10; extra == "all"
177
175
  Requires-Dist: pydo>=0.3.0; extra == "all"