skypilot-nightly 1.0.0.dev20250502__py3-none-any.whl → 1.0.0.dev20250506__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.
Files changed (27) hide show
  1. sky/__init__.py +2 -2
  2. sky/adaptors/nebius.py +0 -12
  3. sky/check.py +44 -31
  4. sky/cli.py +62 -32
  5. sky/client/cli.py +62 -32
  6. sky/clouds/nebius.py +0 -1
  7. sky/dashboard/out/404.html +1 -1
  8. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  9. sky/dashboard/out/clusters/[cluster].html +1 -1
  10. sky/dashboard/out/clusters.html +1 -1
  11. sky/dashboard/out/index.html +1 -1
  12. sky/dashboard/out/jobs/[job].html +1 -1
  13. sky/dashboard/out/jobs.html +1 -1
  14. sky/provision/kubernetes/utils.py +6 -2
  15. sky/provision/nebius/utils.py +19 -39
  16. sky/server/requests/payloads.py +3 -0
  17. sky/utils/common_utils.py +4 -4
  18. sky/utils/controller_utils.py +13 -0
  19. sky/utils/schemas.py +18 -0
  20. {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20250506.dist-info}/METADATA +1 -1
  21. {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20250506.dist-info}/RECORD +27 -27
  22. {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20250506.dist-info}/WHEEL +1 -1
  23. /sky/dashboard/out/_next/static/{GWvVBSCS7FmUiVmjaL1a7 → XGMId9CZTvpE82L-EIMuY}/_buildManifest.js +0 -0
  24. /sky/dashboard/out/_next/static/{GWvVBSCS7FmUiVmjaL1a7 → XGMId9CZTvpE82L-EIMuY}/_ssgManifest.js +0 -0
  25. {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20250506.dist-info}/entry_points.txt +0 -0
  26. {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20250506.dist-info}/licenses/LICENSE +0 -0
  27. {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20250506.dist-info}/top_level.txt +0 -0
sky/__init__.py CHANGED
@@ -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 = '85c4b6b96e1302c7d6886312beb9a34838c35b65'
8
+ _SKYPILOT_COMMIT_SHA = '007c2e532e298f412319e6241d5f243e947689a5'
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.dev20250502'
38
+ __version__ = '1.0.0.dev20250506'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
sky/adaptors/nebius.py CHANGED
@@ -8,11 +8,9 @@ from sky.utils import ux_utils
8
8
 
9
9
  NEBIUS_TENANT_ID_FILENAME = 'NEBIUS_TENANT_ID.txt'
10
10
  NEBIUS_IAM_TOKEN_FILENAME = 'NEBIUS_IAM_TOKEN.txt'
11
- NEBIUS_PROJECT_ID_FILENAME = 'NEBIUS_PROJECT_ID.txt'
12
11
  NEBIUS_CREDENTIALS_FILENAME = 'credentials.json'
13
12
  NEBIUS_TENANT_ID_PATH = '~/.nebius/' + NEBIUS_TENANT_ID_FILENAME
14
13
  NEBIUS_IAM_TOKEN_PATH = '~/.nebius/' + NEBIUS_IAM_TOKEN_FILENAME
15
- NEBIUS_PROJECT_ID_PATH = '~/.nebius/' + NEBIUS_PROJECT_ID_FILENAME
16
14
  NEBIUS_CREDENTIALS_PATH = '~/.nebius/' + NEBIUS_CREDENTIALS_FILENAME
17
15
 
18
16
  DEFAULT_REGION = 'eu-north1'
@@ -92,16 +90,6 @@ def is_token_or_cred_file_exist():
92
90
  os.path.exists(os.path.expanduser(NEBIUS_CREDENTIALS_PATH)))
93
91
 
94
92
 
95
- @annotations.lru_cache(scope='request')
96
- def get_project_id():
97
- try:
98
- with open(os.path.expanduser(NEBIUS_PROJECT_ID_PATH),
99
- encoding='utf-8') as file:
100
- return file.read().strip()
101
- except FileNotFoundError:
102
- return None
103
-
104
-
105
93
  @annotations.lru_cache(scope='request')
106
94
  def get_tenant_id():
107
95
  try:
sky/check.py CHANGED
@@ -1,4 +1,6 @@
1
1
  """Credential checks: check cloud credentials and enable clouds."""
2
+ import collections
3
+ import itertools
2
4
  import os
3
5
  import traceback
4
6
  from types import ModuleType
@@ -16,6 +18,7 @@ from sky.adaptors import cloudflare
16
18
  from sky.clouds import cloud as sky_cloud
17
19
  from sky.utils import registry
18
20
  from sky.utils import rich_utils
21
+ from sky.utils import subprocess_utils
19
22
  from sky.utils import ux_utils
20
23
 
21
24
  CHECK_MARK_EMOJI = '\U00002714' # Heavy check mark unicode
@@ -38,32 +41,19 @@ def check_capabilities(
38
41
  enabled_clouds: Dict[str, List[sky_cloud.CloudCapability]] = {}
39
42
  disabled_clouds: Dict[str, List[sky_cloud.CloudCapability]] = {}
40
43
 
41
- def check_one_cloud(
42
- cloud_tuple: Tuple[str, Union[sky_clouds.Cloud,
43
- ModuleType]]) -> None:
44
- cloud_repr, cloud = cloud_tuple
45
- assert capabilities is not None
46
- # cloud_capabilities is a list of (capability, ok, reason)
47
- # where ok is True if the cloud credentials are valid for the capability
48
- cloud_capabilities: List[Tuple[sky_cloud.CloudCapability, bool,
49
- Optional[str]]] = []
50
- for capability in capabilities:
51
- with rich_utils.safe_status(f'Checking {cloud_repr}...'):
52
- try:
53
- ok, reason = cloud.check_credentials(capability)
54
- except exceptions.NotSupportedError:
55
- continue
56
- except Exception: # pylint: disable=broad-except
57
- # Catch all exceptions to prevent a single cloud
58
- # from blocking the check for other clouds.
59
- ok, reason = False, traceback.format_exc()
60
- cloud_capabilities.append(
61
- (capability, ok, reason.strip() if reason else None))
62
- if ok:
63
- enabled_clouds.setdefault(cloud_repr, []).append(capability)
64
- else:
65
- disabled_clouds.setdefault(cloud_repr, []).append(capability)
66
- _print_checked_cloud(echo, verbose, cloud_tuple, cloud_capabilities)
44
+ def check_one_cloud_one_capability(
45
+ payload: Tuple[Tuple[str, Union[sky_clouds.Cloud, ModuleType]],
46
+ sky_cloud.CloudCapability]
47
+ ) -> Optional[Tuple[sky_cloud.CloudCapability, bool, Optional[str]]]:
48
+ cloud_tuple, capability = payload
49
+ _, cloud = cloud_tuple
50
+ try:
51
+ ok, reason = cloud.check_credentials(capability)
52
+ except exceptions.NotSupportedError:
53
+ return None
54
+ except Exception: # pylint: disable=broad-except
55
+ ok, reason = False, traceback.format_exc()
56
+ return capability, ok, reason.strip() if reason else None
67
57
 
68
58
  def get_cloud_tuple(
69
59
  cloud_name: str) -> Tuple[str, Union[sky_clouds.Cloud, ModuleType]]:
@@ -88,10 +78,10 @@ def check_capabilities(
88
78
 
89
79
  # Use allowed_clouds from config if it exists, otherwise check all clouds.
90
80
  # Also validate names with get_cloud_tuple.
91
- config_allowed_cloud_names = [
81
+ config_allowed_cloud_names = sorted([
92
82
  get_cloud_tuple(c)[0] for c in skypilot_config.get_nested((
93
83
  'allowed_clouds',), get_all_clouds())
94
- ]
84
+ ])
95
85
  # Use disallowed_cloud_names for logging the clouds that will be disabled
96
86
  # because they are not included in allowed_clouds in config.yaml.
97
87
  disallowed_cloud_names = [
@@ -102,8 +92,30 @@ def check_capabilities(
102
92
  c for c in clouds_to_check if c[0] in config_allowed_cloud_names
103
93
  ]
104
94
 
105
- for cloud_tuple in sorted(clouds_to_check):
106
- check_one_cloud(cloud_tuple)
95
+ combinations = list(itertools.product(clouds_to_check, capabilities))
96
+ with rich_utils.safe_status('Checking Cloud(s)...'):
97
+ check_results = subprocess_utils.run_in_parallel(
98
+ check_one_cloud_one_capability, combinations)
99
+
100
+ check_results_dict: Dict[
101
+ Tuple[str, Union[sky_clouds.Cloud, ModuleType]],
102
+ List[Tuple[sky_cloud.CloudCapability, bool,
103
+ Optional[str]]]] = collections.defaultdict(list)
104
+ for combination, check_result in zip(combinations, check_results):
105
+ if check_result is None:
106
+ continue
107
+ capability, ok, _ = check_result
108
+ cloud_tuple, _ = combination
109
+ cloud_repr = cloud_tuple[0]
110
+ if ok:
111
+ enabled_clouds.setdefault(cloud_repr, []).append(capability)
112
+ else:
113
+ disabled_clouds.setdefault(cloud_repr, []).append(capability)
114
+ check_results_dict[cloud_tuple].append(check_result)
115
+
116
+ for cloud_tuple, check_result_list in sorted(check_results_dict.items(),
117
+ key=lambda item: item[0][0]):
118
+ _print_checked_cloud(echo, verbose, cloud_tuple, check_result_list)
107
119
 
108
120
  # Determine the set of enabled clouds: (previously enabled clouds + newly
109
121
  # enabled clouds - newly disabled clouds) intersected with
@@ -173,7 +185,8 @@ def check_capabilities(
173
185
  if not quiet:
174
186
  enabled_clouds_str = '\n ' + '\n '.join([
175
187
  _format_enabled_cloud(cloud, capabilities)
176
- for cloud, capabilities in enabled_clouds.items()
188
+ for cloud, capabilities in sorted(enabled_clouds.items(),
189
+ key=lambda item: item[0])
177
190
  ])
178
191
  echo(f'\n{colorama.Fore.GREEN}{PARTY_POPPER_EMOJI} '
179
192
  f'Enabled clouds {PARTY_POPPER_EMOJI}'
sky/cli.py CHANGED
@@ -3450,29 +3450,53 @@ def show_gpus(
3450
3450
  total_gpu_info: Dict[str, List[int]] = collections.defaultdict(
3451
3451
  lambda: [0, 0])
3452
3452
 
3453
- for (ctx, availability_list) in realtime_gpu_availability_lists:
3454
- realtime_gpu_table = log_utils.create_table(
3455
- ['GPU', qty_header, 'TOTAL_GPUS', free_header])
3456
- for realtime_gpu_availability in sorted(availability_list):
3457
- gpu_availability = models.RealtimeGpuAvailability(
3458
- *realtime_gpu_availability)
3459
- available_qty = (gpu_availability.available
3460
- if gpu_availability.available != -1 else
3461
- no_permissions_str)
3462
- realtime_gpu_table.add_row([
3463
- gpu_availability.gpu,
3464
- _list_to_str(gpu_availability.counts),
3465
- gpu_availability.capacity,
3466
- available_qty,
3467
- ])
3468
- gpu = gpu_availability.gpu
3469
- capacity = gpu_availability.capacity
3470
- # we want total, so skip permission denied.
3471
- available = max(gpu_availability.available, 0)
3472
- if capacity > 0:
3473
- total_gpu_info[gpu][0] += capacity
3474
- total_gpu_info[gpu][1] += available
3475
- realtime_gpu_infos.append((ctx, realtime_gpu_table))
3453
+ # TODO(kyuds): remove backwards compatibility code (else branch)
3454
+ # when API version is bumped
3455
+ if realtime_gpu_availability_lists:
3456
+ # can't check for isinstance tuple as the tuple is converted to list
3457
+ if len(realtime_gpu_availability_lists[0]) == 2:
3458
+ for (ctx, availability_list) in realtime_gpu_availability_lists:
3459
+ realtime_gpu_table = log_utils.create_table(
3460
+ ['GPU', qty_header, 'TOTAL_GPUS', free_header])
3461
+ for realtime_gpu_availability in sorted(availability_list):
3462
+ gpu_availability = models.RealtimeGpuAvailability(
3463
+ *realtime_gpu_availability)
3464
+ available_qty = (gpu_availability.available
3465
+ if gpu_availability.available != -1
3466
+ else no_permissions_str)
3467
+ realtime_gpu_table.add_row([
3468
+ gpu_availability.gpu,
3469
+ _list_to_str(gpu_availability.counts),
3470
+ gpu_availability.capacity,
3471
+ available_qty,
3472
+ ])
3473
+ gpu = gpu_availability.gpu
3474
+ capacity = gpu_availability.capacity
3475
+ # we want total, so skip permission denied.
3476
+ available = max(gpu_availability.available, 0)
3477
+ if capacity > 0:
3478
+ total_gpu_info[gpu][0] += capacity
3479
+ total_gpu_info[gpu][1] += available
3480
+ realtime_gpu_infos.append((ctx, realtime_gpu_table))
3481
+ else:
3482
+ # can remove this with api server version bump.
3483
+ # 2025.05.03
3484
+ availability_list = realtime_gpu_availability_lists
3485
+ realtime_gpu_table = log_utils.create_table(
3486
+ ['GPU', qty_header, 'TOTAL_GPUS', free_header])
3487
+ for realtime_gpu_availability in sorted(availability_list):
3488
+ gpu_availability = models.RealtimeGpuAvailability(
3489
+ *realtime_gpu_availability)
3490
+ available_qty = (gpu_availability.available
3491
+ if gpu_availability.available != -1 else
3492
+ no_permissions_str)
3493
+ realtime_gpu_table.add_row([
3494
+ gpu_availability.gpu,
3495
+ _list_to_str(gpu_availability.counts),
3496
+ gpu_availability.capacity,
3497
+ available_qty,
3498
+ ])
3499
+ realtime_gpu_infos.append((context, realtime_gpu_table))
3476
3500
 
3477
3501
  # display an aggregated table for all contexts
3478
3502
  # if there are more than one contexts with GPUs
@@ -3497,15 +3521,17 @@ def show_gpus(
3497
3521
  available = node_info.free[
3498
3522
  'accelerators_available'] if node_info.free[
3499
3523
  'accelerators_available'] != -1 else no_permissions_str
3500
- node_table.add_row([
3501
- node_name, node_info.accelerator_type,
3502
- node_info.total['accelerator_count'], available
3503
- ])
3524
+ total = node_info.total['accelerator_count']
3525
+ if total > 0:
3526
+ node_table.add_row([
3527
+ node_name, node_info.accelerator_type,
3528
+ node_info.total['accelerator_count'], available
3529
+ ])
3504
3530
  k8s_per_node_acc_message = (
3505
3531
  'Kubernetes per node accelerator availability ')
3506
3532
  if nodes_info.hint:
3507
3533
  k8s_per_node_acc_message += nodes_info.hint
3508
- return (f'{colorama.Fore.LIGHTMAGENTA_EX}{colorama.Style.NORMAL}'
3534
+ return (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
3509
3535
  f'{k8s_per_node_acc_message}'
3510
3536
  f'{colorama.Style.RESET_ALL}\n'
3511
3537
  f'{node_table.get_string()}')
@@ -3557,17 +3583,21 @@ def show_gpus(
3557
3583
  'Total Kubernetes GPUs'
3558
3584
  f'{colorama.Style.RESET_ALL}\n')
3559
3585
  yield from total_table.get_string()
3560
- yield '\n-----\n\n'
3586
+ yield '\n\n'
3561
3587
 
3562
3588
  # print individual infos.
3563
- for (ctx, k8s_realtime_table) in k8s_realtime_infos:
3589
+ for (idx,
3590
+ (ctx,
3591
+ k8s_realtime_table)) in enumerate(k8s_realtime_infos):
3564
3592
  context_str = f'(Context: {ctx})' if ctx else ''
3565
3593
  yield (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
3566
3594
  f'Kubernetes GPUs {context_str}'
3567
3595
  f'{colorama.Style.RESET_ALL}\n')
3568
3596
  yield from k8s_realtime_table.get_string()
3569
3597
  yield '\n\n'
3570
- yield _format_kubernetes_node_info(ctx) + '\n-----\n\n'
3598
+ yield _format_kubernetes_node_info(ctx)
3599
+ if idx != len(k8s_realtime_infos) - 1:
3600
+ yield '\n\n'
3571
3601
  if kubernetes_autoscaling:
3572
3602
  k8s_messages += (
3573
3603
  '\n' + kubernetes_utils.KUBERNETES_AUTOSCALER_NOTE)
@@ -3669,7 +3699,7 @@ def show_gpus(
3669
3699
  'Total Kubernetes GPUs'
3670
3700
  f'{colorama.Style.RESET_ALL}\n')
3671
3701
  yield from total_table.get_string()
3672
- yield '\n-----\n\n'
3702
+ yield '\n\n'
3673
3703
 
3674
3704
  # print individual tables
3675
3705
  for (ctx, k8s_realtime_table) in k8s_realtime_infos:
sky/client/cli.py CHANGED
@@ -3450,29 +3450,53 @@ def show_gpus(
3450
3450
  total_gpu_info: Dict[str, List[int]] = collections.defaultdict(
3451
3451
  lambda: [0, 0])
3452
3452
 
3453
- for (ctx, availability_list) in realtime_gpu_availability_lists:
3454
- realtime_gpu_table = log_utils.create_table(
3455
- ['GPU', qty_header, 'TOTAL_GPUS', free_header])
3456
- for realtime_gpu_availability in sorted(availability_list):
3457
- gpu_availability = models.RealtimeGpuAvailability(
3458
- *realtime_gpu_availability)
3459
- available_qty = (gpu_availability.available
3460
- if gpu_availability.available != -1 else
3461
- no_permissions_str)
3462
- realtime_gpu_table.add_row([
3463
- gpu_availability.gpu,
3464
- _list_to_str(gpu_availability.counts),
3465
- gpu_availability.capacity,
3466
- available_qty,
3467
- ])
3468
- gpu = gpu_availability.gpu
3469
- capacity = gpu_availability.capacity
3470
- # we want total, so skip permission denied.
3471
- available = max(gpu_availability.available, 0)
3472
- if capacity > 0:
3473
- total_gpu_info[gpu][0] += capacity
3474
- total_gpu_info[gpu][1] += available
3475
- realtime_gpu_infos.append((ctx, realtime_gpu_table))
3453
+ # TODO(kyuds): remove backwards compatibility code (else branch)
3454
+ # when API version is bumped
3455
+ if realtime_gpu_availability_lists:
3456
+ # can't check for isinstance tuple as the tuple is converted to list
3457
+ if len(realtime_gpu_availability_lists[0]) == 2:
3458
+ for (ctx, availability_list) in realtime_gpu_availability_lists:
3459
+ realtime_gpu_table = log_utils.create_table(
3460
+ ['GPU', qty_header, 'TOTAL_GPUS', free_header])
3461
+ for realtime_gpu_availability in sorted(availability_list):
3462
+ gpu_availability = models.RealtimeGpuAvailability(
3463
+ *realtime_gpu_availability)
3464
+ available_qty = (gpu_availability.available
3465
+ if gpu_availability.available != -1
3466
+ else no_permissions_str)
3467
+ realtime_gpu_table.add_row([
3468
+ gpu_availability.gpu,
3469
+ _list_to_str(gpu_availability.counts),
3470
+ gpu_availability.capacity,
3471
+ available_qty,
3472
+ ])
3473
+ gpu = gpu_availability.gpu
3474
+ capacity = gpu_availability.capacity
3475
+ # we want total, so skip permission denied.
3476
+ available = max(gpu_availability.available, 0)
3477
+ if capacity > 0:
3478
+ total_gpu_info[gpu][0] += capacity
3479
+ total_gpu_info[gpu][1] += available
3480
+ realtime_gpu_infos.append((ctx, realtime_gpu_table))
3481
+ else:
3482
+ # can remove this with api server version bump.
3483
+ # 2025.05.03
3484
+ availability_list = realtime_gpu_availability_lists
3485
+ realtime_gpu_table = log_utils.create_table(
3486
+ ['GPU', qty_header, 'TOTAL_GPUS', free_header])
3487
+ for realtime_gpu_availability in sorted(availability_list):
3488
+ gpu_availability = models.RealtimeGpuAvailability(
3489
+ *realtime_gpu_availability)
3490
+ available_qty = (gpu_availability.available
3491
+ if gpu_availability.available != -1 else
3492
+ no_permissions_str)
3493
+ realtime_gpu_table.add_row([
3494
+ gpu_availability.gpu,
3495
+ _list_to_str(gpu_availability.counts),
3496
+ gpu_availability.capacity,
3497
+ available_qty,
3498
+ ])
3499
+ realtime_gpu_infos.append((context, realtime_gpu_table))
3476
3500
 
3477
3501
  # display an aggregated table for all contexts
3478
3502
  # if there are more than one contexts with GPUs
@@ -3497,15 +3521,17 @@ def show_gpus(
3497
3521
  available = node_info.free[
3498
3522
  'accelerators_available'] if node_info.free[
3499
3523
  'accelerators_available'] != -1 else no_permissions_str
3500
- node_table.add_row([
3501
- node_name, node_info.accelerator_type,
3502
- node_info.total['accelerator_count'], available
3503
- ])
3524
+ total = node_info.total['accelerator_count']
3525
+ if total > 0:
3526
+ node_table.add_row([
3527
+ node_name, node_info.accelerator_type,
3528
+ node_info.total['accelerator_count'], available
3529
+ ])
3504
3530
  k8s_per_node_acc_message = (
3505
3531
  'Kubernetes per node accelerator availability ')
3506
3532
  if nodes_info.hint:
3507
3533
  k8s_per_node_acc_message += nodes_info.hint
3508
- return (f'{colorama.Fore.LIGHTMAGENTA_EX}{colorama.Style.NORMAL}'
3534
+ return (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
3509
3535
  f'{k8s_per_node_acc_message}'
3510
3536
  f'{colorama.Style.RESET_ALL}\n'
3511
3537
  f'{node_table.get_string()}')
@@ -3557,17 +3583,21 @@ def show_gpus(
3557
3583
  'Total Kubernetes GPUs'
3558
3584
  f'{colorama.Style.RESET_ALL}\n')
3559
3585
  yield from total_table.get_string()
3560
- yield '\n-----\n\n'
3586
+ yield '\n\n'
3561
3587
 
3562
3588
  # print individual infos.
3563
- for (ctx, k8s_realtime_table) in k8s_realtime_infos:
3589
+ for (idx,
3590
+ (ctx,
3591
+ k8s_realtime_table)) in enumerate(k8s_realtime_infos):
3564
3592
  context_str = f'(Context: {ctx})' if ctx else ''
3565
3593
  yield (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
3566
3594
  f'Kubernetes GPUs {context_str}'
3567
3595
  f'{colorama.Style.RESET_ALL}\n')
3568
3596
  yield from k8s_realtime_table.get_string()
3569
3597
  yield '\n\n'
3570
- yield _format_kubernetes_node_info(ctx) + '\n-----\n\n'
3598
+ yield _format_kubernetes_node_info(ctx)
3599
+ if idx != len(k8s_realtime_infos) - 1:
3600
+ yield '\n\n'
3571
3601
  if kubernetes_autoscaling:
3572
3602
  k8s_messages += (
3573
3603
  '\n' + kubernetes_utils.KUBERNETES_AUTOSCALER_NOTE)
@@ -3669,7 +3699,7 @@ def show_gpus(
3669
3699
  'Total Kubernetes GPUs'
3670
3700
  f'{colorama.Style.RESET_ALL}\n')
3671
3701
  yield from total_table.get_string()
3672
- yield '\n-----\n\n'
3702
+ yield '\n\n'
3673
3703
 
3674
3704
  # print individual tables
3675
3705
  for (ctx, k8s_realtime_table) in k8s_realtime_infos:
sky/clouds/nebius.py CHANGED
@@ -17,7 +17,6 @@ _CREDENTIAL_FILES = [
17
17
  # credential files for Nebius
18
18
  nebius.NEBIUS_TENANT_ID_FILENAME,
19
19
  nebius.NEBIUS_IAM_TOKEN_FILENAME,
20
- nebius.NEBIUS_PROJECT_ID_FILENAME,
21
20
  nebius.NEBIUS_CREDENTIALS_FILENAME
22
21
  ]
23
22
 
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-6ac338bc2239cb45.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-6ac338bc2239cb45.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/845-9e60713e0c441abc.js" defer=""></script><script src="/dashboard/_next/static/chunks/236-2db3ee3fba33dd9e.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-0a572fe0dbb89c4d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-f383db7389368ea7.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/845-9e60713e0c441abc.js" defer=""></script><script src="/dashboard/_next/static/chunks/236-2db3ee3fba33dd9e.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-0a572fe0dbb89c4d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-f383db7389368ea7.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="preload" href="/dashboard/skypilot.svg" as="image" fetchpriority="high"/><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/845-9e60713e0c441abc.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-0a572fe0dbb89c4d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="min-h-screen bg-gray-50"><div class="fixed top-0 left-0 right-0 z-50 shadow-sm"><div class="fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm"><div class="flex items-center h-full"><div class="flex items-center space-x-4 mr-6"><a class="flex items-center px-1 pt-1 h-full" href="/dashboard"><div class="h-20 w-20 flex items-center justify-center"><img alt="SkyPilot Logo" fetchpriority="high" width="80" height="80" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" src="/dashboard/skypilot.svg"/></div></a></div><div class="flex items-center space-x-2 md:space-x-6 mr-6"><a class="inline-flex items-center border-b-2 border-transparent text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/clusters"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg><span>Clusters</span></a><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/jobs"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path><rect width="20" height="14" x="2" y="6" rx="2"></rect></svg><span>Jobs</span></a><div class="inline-flex items-center px-1 pt-1 text-gray-400"><svg class="w-4 h-4" viewBox="0 0 423.683 423.683" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><g><path d="M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"></path></g></g></svg><span class="ml-2">Services</span><span class="text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded">Soon</span></div></div><div class="flex items-center space-x-1 ml-auto"><a href="https://skypilot.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer" title="Docs"><span class="mr-1">Docs</span><svg class="w-3.5 h-3.5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a><div class="border-l border-gray-200 h-6 mx-1"></div><a href="https://github.com/skypilot-org/skypilot" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="GitHub"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://slack.skypilot.co/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Slack"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path transform="scale(0.85) translate(1.8, 1.8)" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg></a><a href="https://github.com/skypilot-org/skypilot/issues/new" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Leave Feedback"><svg class="w-5 h-5" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><path fill="none" d="M0 0h24v24H0z"></path><path d="M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"></path></g></svg></a></div></div></div></div><div class="transition-all duration-200 ease-in-out min-h-screen" style="padding-top:56px"><main class="p-6"><div class="flex items-center justify-between mb-4 h-5"><div class="text-base"><a class="text-sky-blue hover:underline leading-none" href="/dashboard/clusters">Sky Clusters</a></div><div class="flex items-center"><button class="justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent h-10 px-4 py-2 text-sky-blue hover:text-sky-blue-bright flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw h-4 w-4 mr-1.5"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg><span>Refresh</span></button></div></div><div><div class="rounded-lg border bg-card text-card-foreground shadow-sm"><div class="relative w-full overflow-auto"><table class="w-full caption-bottom text-base"><thead class="[&amp;_tr]:border-b"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Status</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Cluster</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">User</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Resources</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Region</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Started</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Actions</th></tr></thead><tbody class="[&amp;_tr:last-child]:border-0"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><td class="p-4 align-middle [&amp;:has([role=checkbox])]:pr-0 text-center py-6 text-gray-500" colSpan="8">No active clusters</td></tr></tbody></table></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="preload" href="/dashboard/skypilot.svg" as="image" fetchpriority="high"/><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/845-9e60713e0c441abc.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-0a572fe0dbb89c4d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="min-h-screen bg-gray-50"><div class="fixed top-0 left-0 right-0 z-50 shadow-sm"><div class="fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm"><div class="flex items-center h-full"><div class="flex items-center space-x-4 mr-6"><a class="flex items-center px-1 pt-1 h-full" href="/dashboard"><div class="h-20 w-20 flex items-center justify-center"><img alt="SkyPilot Logo" fetchpriority="high" width="80" height="80" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" src="/dashboard/skypilot.svg"/></div></a></div><div class="flex items-center space-x-2 md:space-x-6 mr-6"><a class="inline-flex items-center border-b-2 border-transparent text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/clusters"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg><span>Clusters</span></a><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/jobs"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path><rect width="20" height="14" x="2" y="6" rx="2"></rect></svg><span>Jobs</span></a><div class="inline-flex items-center px-1 pt-1 text-gray-400"><svg class="w-4 h-4" viewBox="0 0 423.683 423.683" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><g><path d="M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"></path></g></g></svg><span class="ml-2">Services</span><span class="text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded">Soon</span></div></div><div class="flex items-center space-x-1 ml-auto"><a href="https://skypilot.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer" title="Docs"><span class="mr-1">Docs</span><svg class="w-3.5 h-3.5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a><div class="border-l border-gray-200 h-6 mx-1"></div><a href="https://github.com/skypilot-org/skypilot" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="GitHub"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://slack.skypilot.co/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Slack"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path transform="scale(0.85) translate(1.8, 1.8)" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg></a><a href="https://github.com/skypilot-org/skypilot/issues/new" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Leave Feedback"><svg class="w-5 h-5" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><path fill="none" d="M0 0h24v24H0z"></path><path d="M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"></path></g></svg></a></div></div></div></div><div class="transition-all duration-200 ease-in-out min-h-screen" style="padding-top:56px"><main class="p-6"><div class="flex items-center justify-between mb-4 h-5"><div class="text-base"><a class="text-sky-blue hover:underline leading-none" href="/dashboard/clusters">Sky Clusters</a></div><div class="flex items-center"><button class="justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent h-10 px-4 py-2 text-sky-blue hover:text-sky-blue-bright flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw h-4 w-4 mr-1.5"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg><span>Refresh</span></button></div></div><div><div class="rounded-lg border bg-card text-card-foreground shadow-sm"><div class="relative w-full overflow-auto"><table class="w-full caption-bottom text-base"><thead class="[&amp;_tr]:border-b"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Status</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Cluster</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">User</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Resources</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Region</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Started</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Actions</th></tr></thead><tbody class="[&amp;_tr:last-child]:border-0"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><td class="p-4 align-middle [&amp;:has([role=checkbox])]:pr-0 text-center py-6 text-gray-500" colSpan="8">No active clusters</td></tr></tbody></table></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-f9f039532ca8cbc4.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-f9f039532ca8cbc4.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-1c519e1afc523dc9.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-1c519e1afc523dc9.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div>Loading...</div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="preload" href="/dashboard/skypilot.svg" as="image" fetchpriority="high"/><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/845-9e60713e0c441abc.js" defer=""></script><script src="/dashboard/_next/static/chunks/236-2db3ee3fba33dd9e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="min-h-screen bg-gray-50"><div class="fixed top-0 left-0 right-0 z-50 shadow-sm"><div class="fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm"><div class="flex items-center h-full"><div class="flex items-center space-x-4 mr-6"><a class="flex items-center px-1 pt-1 h-full" href="/dashboard"><div class="h-20 w-20 flex items-center justify-center"><img alt="SkyPilot Logo" fetchpriority="high" width="80" height="80" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" src="/dashboard/skypilot.svg"/></div></a></div><div class="flex items-center space-x-2 md:space-x-6 mr-6"><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/clusters"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg><span>Clusters</span></a><a class="inline-flex items-center border-b-2 border-transparent text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/jobs"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path><rect width="20" height="14" x="2" y="6" rx="2"></rect></svg><span>Jobs</span></a><div class="inline-flex items-center px-1 pt-1 text-gray-400"><svg class="w-4 h-4" viewBox="0 0 423.683 423.683" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><g><path d="M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"></path></g></g></svg><span class="ml-2">Services</span><span class="text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded">Soon</span></div></div><div class="flex items-center space-x-1 ml-auto"><a href="https://skypilot.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer" title="Docs"><span class="mr-1">Docs</span><svg class="w-3.5 h-3.5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a><div class="border-l border-gray-200 h-6 mx-1"></div><a href="https://github.com/skypilot-org/skypilot" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="GitHub"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://slack.skypilot.co/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Slack"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path transform="scale(0.85) translate(1.8, 1.8)" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg></a><a href="https://github.com/skypilot-org/skypilot/issues/new" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Leave Feedback"><svg class="w-5 h-5" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><path fill="none" d="M0 0h24v24H0z"></path><path d="M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"></path></g></svg></a></div></div></div></div><div class="transition-all duration-200 ease-in-out min-h-screen" style="padding-top:56px"><main class="p-6"><div class="flex items-center justify-between mb-4 h-5"><div class="text-base"><a class="text-sky-blue hover:underline leading-none" href="/dashboard/jobs">Managed Jobs</a></div><div class="flex items-center space-x-2"><button class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent h-9 rounded-md px-3 text-sky-blue hover:text-sky-blue-bright" title="Refresh"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw h-4 w-4 mr-1.5"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg><span>Refresh</span></button></div></div><div class="relative"><div class="flex flex-col space-y-1 mb-1"><div class="flex flex-wrap items-center text-sm mb-1"><span class="mr-2 text-sm font-medium">Statuses:</span><div class="flex flex-wrap gap-2 items-center"></div></div></div><div class="rounded-lg border bg-card text-card-foreground shadow-sm"><div class="relative w-full overflow-auto"><table class="w-full caption-bottom text-base"><thead class="[&amp;_tr]:border-b"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">ID</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Name</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">User</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Submitted</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Duration</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Status</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Resources</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Cluster</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Region</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Recoveries</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Details</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Logs</th></tr></thead><tbody class="[&amp;_tr:last-child]:border-0"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><td class="p-4 align-middle [&amp;:has([role=checkbox])]:pr-0 text-center py-6" colSpan="12"><div class="flex flex-col items-center space-y-4"><p class="text-gray-500">No active jobs</p></div></td></tr></tbody></table></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"GWvVBSCS7FmUiVmjaL1a7","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="preload" href="/dashboard/skypilot.svg" as="image" fetchpriority="high"/><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/678-206dddca808e6d16.js" defer=""></script><script src="/dashboard/_next/static/chunks/312-c3c8845990db8ffc.js" defer=""></script><script src="/dashboard/_next/static/chunks/979-7bf73a4c7cea0f5c.js" defer=""></script><script src="/dashboard/_next/static/chunks/845-9e60713e0c441abc.js" defer=""></script><script src="/dashboard/_next/static/chunks/236-2db3ee3fba33dd9e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="min-h-screen bg-gray-50"><div class="fixed top-0 left-0 right-0 z-50 shadow-sm"><div class="fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm"><div class="flex items-center h-full"><div class="flex items-center space-x-4 mr-6"><a class="flex items-center px-1 pt-1 h-full" href="/dashboard"><div class="h-20 w-20 flex items-center justify-center"><img alt="SkyPilot Logo" fetchpriority="high" width="80" height="80" decoding="async" data-nimg="1" class="w-full h-full object-contain" style="color:transparent" src="/dashboard/skypilot.svg"/></div></a></div><div class="flex items-center space-x-2 md:space-x-6 mr-6"><a class="inline-flex items-center border-b-2 border-transparent hover:text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/clusters"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg><span>Clusters</span></a><a class="inline-flex items-center border-b-2 border-transparent text-blue-600 px-1 pt-1 space-x-2" href="/dashboard/jobs"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path><rect width="20" height="14" x="2" y="6" rx="2"></rect></svg><span>Jobs</span></a><div class="inline-flex items-center px-1 pt-1 text-gray-400"><svg class="w-4 h-4" viewBox="0 0 423.683 423.683" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><g><path d="M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"></path></g></g></svg><span class="ml-2">Services</span><span class="text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded">Soon</span></div></div><div class="flex items-center space-x-1 ml-auto"><a href="https://skypilot.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer" title="Docs"><span class="mr-1">Docs</span><svg class="w-3.5 h-3.5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a><div class="border-l border-gray-200 h-6 mx-1"></div><a href="https://github.com/skypilot-org/skypilot" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="GitHub"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://slack.skypilot.co/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Slack"><svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path transform="scale(0.85) translate(1.8, 1.8)" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg></a><a href="https://github.com/skypilot-org/skypilot/issues/new" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer" title="Leave Feedback"><svg class="w-5 h-5" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><path fill="none" d="M0 0h24v24H0z"></path><path d="M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"></path></g></svg></a></div></div></div></div><div class="transition-all duration-200 ease-in-out min-h-screen" style="padding-top:56px"><main class="p-6"><div class="flex items-center justify-between mb-4 h-5"><div class="text-base"><a class="text-sky-blue hover:underline leading-none" href="/dashboard/jobs">Managed Jobs</a></div><div class="flex items-center space-x-2"><button class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent h-9 rounded-md px-3 text-sky-blue hover:text-sky-blue-bright" title="Refresh"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw h-4 w-4 mr-1.5"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg><span>Refresh</span></button></div></div><div class="relative"><div class="flex flex-col space-y-1 mb-1"><div class="flex flex-wrap items-center text-sm mb-1"><span class="mr-2 text-sm font-medium">Statuses:</span><div class="flex flex-wrap gap-2 items-center"></div></div></div><div class="rounded-lg border bg-card text-card-foreground shadow-sm"><div class="relative w-full overflow-auto"><table class="w-full caption-bottom text-base"><thead class="[&amp;_tr]:border-b"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">ID</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Name</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">User</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Submitted</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Duration</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Status</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Resources</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Cluster</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Region</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0 sortable whitespace-nowrap">Recoveries</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Details</th><th class="h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&amp;:has([role=checkbox])]:pr-0">Logs</th></tr></thead><tbody class="[&amp;_tr:last-child]:border-0"><tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"><td class="p-4 align-middle [&amp;:has([role=checkbox])]:pr-0 text-center py-6" colSpan="12"><div class="flex flex-col items-center space-y-4"><p class="text-gray-500">No active jobs</p></div></td></tr></tbody></table></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"XGMId9CZTvpE82L-EIMuY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -980,8 +980,12 @@ def check_instance_fits(context: Optional[str],
980
980
  if node_cpus > max_cpu:
981
981
  max_cpu = node_cpus
982
982
  max_mem = node_memory_gb
983
- if (node_cpus >= candidate_instance_type.cpus and
984
- node_memory_gb >= candidate_instance_type.memory):
983
+ # We don't consider nodes that have exactly the same amount of
984
+ # CPU or memory as the candidate instance type.
985
+ # This is to account for the fact that each node always has some
986
+ # amount kube-system pods running on it and consuming resources.
987
+ if (node_cpus > candidate_instance_type.cpus and
988
+ node_memory_gb > candidate_instance_type.memory):
985
989
  return True, None
986
990
  return False, (
987
991
  'Maximum resources found on a single node: '
@@ -4,6 +4,7 @@ from typing import Any, Dict
4
4
  import uuid
5
5
 
6
6
  from sky import sky_logging
7
+ from sky import skypilot_config
7
8
  from sky.adaptors import nebius
8
9
  from sky.utils import common_utils
9
10
 
@@ -35,44 +36,22 @@ def get_project_by_region(region: str) -> str:
35
36
  service = nebius.iam().ProjectServiceClient(nebius.sdk())
36
37
  projects = service.list(nebius.iam().ListProjectsRequest(
37
38
  parent_id=nebius.get_tenant_id())).wait()
38
- # To find a project in a specific region, we rely on the project ID to
39
- # deduce the region, since there is currently no method to retrieve region
40
- # information directly from the project. Additionally, there is only one
41
- # project per region, and projects cannot be created at this time.
42
- # The region is determined from the project ID using a region-specific
43
- # identifier embedded in it.
44
- # Project id looks like project-e00xxxxxxxxxxxxxx where
45
- # e00 - id of region 'eu-north1'
46
- # e01 - id of region 'eu-west1'
47
- region_ids = {'eu-north1': 'e00', 'eu-west1': 'e01'}
48
- # TODO(SalikovAlex): fix when info about region will be in projects list
49
- # Currently, Nebius cloud supports 2 regions. We manually enumerate
50
- # them here. Reference: https://docs.nebius.com/overview/regions
51
39
 
52
40
  # Check is there project if in config
53
- preferable_project_id = nebius.get_project_id()
54
- if preferable_project_id is not None:
55
- if preferable_project_id[8:11] == region_ids[region]:
56
- return preferable_project_id
57
- logger.warning(
58
- f'Can\'t use customized NEBIUS_PROJECT_ID ({preferable_project_id})'
59
- f' for region {region}. Please check if the project ID is correct.')
41
+ project_id = skypilot_config.get_nested(('nebius', region, 'project_id'),
42
+ None)
43
+ if project_id is not None:
44
+ return project_id
60
45
  for project in projects.items:
61
- if project.metadata.id[8:11] == region_ids[region]:
46
+ if project.status.region == region:
62
47
  return project.metadata.id
63
48
  raise Exception(f'No project found for region "{region}".')
64
49
 
65
50
 
66
- def get_or_create_gpu_cluster(name: str, region: str) -> str:
51
+ def get_or_create_gpu_cluster(name: str, project_id: str, fabric: str) -> str:
67
52
  """Creates a GPU cluster.
68
- When creating a GPU cluster, select an InfiniBand fabric for it:
69
-
70
- fabric-2, fabric-3 or fabric-4 for projects in the eu-north1 region.
71
- fabric-5 for projects in the eu-west1 region.
72
-
73
53
  https://docs.nebius.com/compute/clusters/gpu
74
54
  """
75
- project_id = get_project_by_region(region)
76
55
  service = nebius.compute().GpuClusterServiceClient(nebius.sdk())
77
56
  try:
78
57
  cluster = service.get_by_name(nebius.nebius_common().GetByNameRequest(
@@ -80,14 +59,7 @@ def get_or_create_gpu_cluster(name: str, region: str) -> str:
80
59
  name=name,
81
60
  )).wait()
82
61
  cluster_id = cluster.metadata.id
83
- except nebius.request_error() as no_cluster_found_error:
84
- if region == 'eu-north1':
85
- fabric = 'fabric-4'
86
- elif region == 'eu-west1':
87
- fabric = 'fabric-5'
88
- else:
89
- raise RuntimeError(
90
- f'Unsupported region {region}.') from no_cluster_found_error
62
+ except nebius.request_error():
91
63
  cluster = service.create(nebius.compute().CreateGpuClusterRequest(
92
64
  metadata=nebius.nebius_common().ResourceMetadata(
93
65
  parent_id=project_id,
@@ -196,15 +168,23 @@ def launch(cluster_name_on_cloud: str, node_type: str, platform: str,
196
168
 
197
169
  disk_name = 'disk-' + instance_name
198
170
  cluster_id = None
171
+ project_id = get_project_by_region(region)
199
172
  # 8 GPU virtual machines can be grouped into a GPU cluster.
200
173
  # The GPU clusters are built with InfiniBand secure high-speed networking.
201
174
  # https://docs.nebius.com/compute/clusters/gpu
202
175
  if platform in ('gpu-h100-sxm', 'gpu-h200-sxm'):
203
176
  if preset == '8gpu-128vcpu-1600gb':
204
- cluster_id = get_or_create_gpu_cluster(cluster_name_on_cloud,
205
- region)
177
+ # Check is there fabric in config
178
+ fabric = skypilot_config.get_nested(('nebius', region, 'fabric'),
179
+ None)
180
+ if fabric is None:
181
+ logger.warning(
182
+ f'Set up fabric for region {region} in ~/.sky/config.yaml '
183
+ 'to use GPU clusters.')
184
+ else:
185
+ cluster_id = get_or_create_gpu_cluster(cluster_name_on_cloud,
186
+ project_id, fabric)
206
187
 
207
- project_id = get_project_by_region(region)
208
188
  service = nebius.compute().DiskServiceClient(nebius.sdk())
209
189
  disk = service.create(nebius.compute().CreateDiskRequest(
210
190
  metadata=nebius.nebius_common().ResourceMetadata(
@@ -40,8 +40,11 @@ EXTERNAL_LOCAL_ENV_VARS = [
40
40
  'AWS_PROFILE',
41
41
  'AWS_ACCESS_KEY_ID',
42
42
  'AWS_SECRET_ACCESS_KEY',
43
+ 'AWS_SESSION_TOKEN',
43
44
  # Allow overriding the GCP authentication.
44
45
  'GOOGLE_APPLICATION_CREDENTIALS',
46
+ # Allow overriding the kubeconfig.
47
+ 'KUBECONFIG',
45
48
  ]
46
49
 
47
50
 
sky/utils/common_utils.py CHANGED
@@ -66,7 +66,7 @@ def get_usage_run_id() -> str:
66
66
  return str(uuid.uuid4())
67
67
 
68
68
 
69
- def _is_valid_user_hash(user_hash: Optional[str]) -> bool:
69
+ def is_valid_user_hash(user_hash: Optional[str]) -> bool:
70
70
  if user_hash is None:
71
71
  return False
72
72
  try:
@@ -80,7 +80,7 @@ def generate_user_hash() -> str:
80
80
  """Generates a unique user-machine specific hash."""
81
81
  hash_str = user_and_hostname_hash()
82
82
  user_hash = hashlib.md5(hash_str.encode()).hexdigest()[:USER_HASH_LENGTH]
83
- if not _is_valid_user_hash(user_hash):
83
+ if not is_valid_user_hash(user_hash):
84
84
  # A fallback in case the hash is invalid.
85
85
  user_hash = uuid.uuid4().hex[:USER_HASH_LENGTH]
86
86
  return user_hash
@@ -93,7 +93,7 @@ def get_user_hash() -> str:
93
93
  hostname changes causing a new user hash to be generated.
94
94
  """
95
95
  user_hash = os.getenv(constants.USER_ID_ENV_VAR)
96
- if _is_valid_user_hash(user_hash):
96
+ if is_valid_user_hash(user_hash):
97
97
  assert user_hash is not None
98
98
  return user_hash
99
99
 
@@ -102,7 +102,7 @@ def get_user_hash() -> str:
102
102
  with open(_USER_HASH_FILE, 'r', encoding='utf-8') as f:
103
103
  # Remove invalid characters.
104
104
  user_hash = f.read().strip()
105
- if _is_valid_user_hash(user_hash):
105
+ if is_valid_user_hash(user_hash):
106
106
  return user_hash
107
107
 
108
108
  user_hash = generate_user_hash()
@@ -168,14 +168,27 @@ class Controllers(enum.Enum):
168
168
  # we may not know the exact name, because we are missing the server-side
169
169
  # common.SERVER_ID. So, we will assume anything that matches the prefix
170
170
  # is a controller.
171
+ prefix = None
171
172
  if name.startswith(common.SKY_SERVE_CONTROLLER_PREFIX):
172
173
  controller = cls.SKY_SERVE_CONTROLLER
174
+ prefix = common.SKY_SERVE_CONTROLLER_PREFIX
173
175
  elif name.startswith(common.JOB_CONTROLLER_PREFIX):
174
176
  controller = cls.JOBS_CONTROLLER
177
+ prefix = common.JOB_CONTROLLER_PREFIX
175
178
  if controller is not None and name != controller.value.cluster_name:
176
179
  # The client-side cluster_name is not accurate. Assume that `name`
177
180
  # is the actual cluster name, so need to set the controller's
178
181
  # cluster name to the input name.
182
+
183
+ # Assert that the cluster name is well-formed. It should be
184
+ # {prefix}{hash}, where prefix is set above, and hash is a valid
185
+ # user hash.
186
+ assert prefix is not None, prefix
187
+ assert name.startswith(prefix), name
188
+ assert common_utils.is_valid_user_hash(name[len(prefix):]), (name,
189
+ prefix)
190
+
191
+ # Update the cluster name.
179
192
  controller.value.cluster_name = name
180
193
  return controller
181
194
 
sky/utils/schemas.py CHANGED
@@ -963,6 +963,24 @@ def get_config_schema():
963
963
  }
964
964
  },
965
965
  },
966
+ 'nebius': {
967
+ 'type': 'object',
968
+ 'required': [],
969
+ 'properties': {},
970
+ 'additionalProperties': {
971
+ 'type': 'object',
972
+ 'required': [],
973
+ 'additionalProperties': False,
974
+ 'properties': {
975
+ 'project_id': {
976
+ 'type': 'string',
977
+ },
978
+ 'fabric': {
979
+ 'type': 'string',
980
+ },
981
+ }
982
+ },
983
+ }
966
984
  }
967
985
 
968
986
  admin_policy_schema = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250502
3
+ Version: 1.0.0.dev20250506
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,8 +1,8 @@
1
- sky/__init__.py,sha256=P6pv7ZlisJ5hVPFq4LG8mIuJLeq-sEaWINntSKk7xEE,6428
1
+ sky/__init__.py,sha256=nqevI5opBAx2lXTrI_XD_3o7CkXa0ghKJeov_v6LCTA,6428
2
2
  sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
3
3
  sky/authentication.py,sha256=ND011K_-Ud1dVZF37A9KrwYir_ihJXcHc7iDWmuBc8Q,22872
4
- sky/check.py,sha256=PPNQnaaZBA9_aogJpN4gnG4XWnTqkd74c-rBYDkDRDY,16101
5
- sky/cli.py,sha256=ZSjxxHWxy9Vow7LXVts7a_NrCCDYRA_NypKsZXRdcP0,231896
4
+ sky/check.py,sha256=AOc2t7n7mFYxlwtGNP98xIpy0azjLFewajwRJrxPV5E,16546
5
+ sky/cli.py,sha256=_lCbPP2MDS1r5drdHSh7MIIwnsh08-SivUFzDoNqEi4,233657
6
6
  sky/cloud_stores.py,sha256=Ln5GBpel-sEs7rVx7bBrMkfLwA_bctI05Rox2uoz7Lo,26388
7
7
  sky/core.py,sha256=vIVBnsK3KUh2rH0bya6VnGihm1_GWC1440AbYPHbwLA,49157
8
8
  sky/dag.py,sha256=8x-VMtjvSi0lYBemCMPLYq5ONljhoABjWzMKjmmdjSo,3369
@@ -26,7 +26,7 @@ sky/adaptors/docker.py,sha256=_kzpZ0fkWHqqQAVVl0llTsCE31KYz3Sjn8psTBQHVkA,468
26
26
  sky/adaptors/gcp.py,sha256=oEb9jClEtApw6PQnxdxDYxOCYsedvM3aiko1EW1FDVo,3501
27
27
  sky/adaptors/ibm.py,sha256=7YbHrWbYcZsJDgxMBNZr1yBI03mjs_C3pnCTCz-MNtQ,5068
28
28
  sky/adaptors/kubernetes.py,sha256=FIPzhhiwpnpRqMlDHO2XGhBlHce_ZktRdg7xTYRTmmM,7473
29
- sky/adaptors/nebius.py,sha256=vaWh8MK6mfGB_mcTrBd0sWO6DhMDep0xFm-w2PTDcH4,6286
29
+ sky/adaptors/nebius.py,sha256=5vshmw0kCX98Zb6fClx00BCuzF5lm-vL0CjxzUtZrLU,5897
30
30
  sky/adaptors/oci.py,sha256=xJt6J9xBSFIENa6FwEt1V1sZE8puAZ_vPEoGlyQACPs,2839
31
31
  sky/adaptors/runpod.py,sha256=4Nt_BfZhJAKQNA3wO8cxvvNI8x4NsDGHu_4EhRDlGYQ,225
32
32
  sky/adaptors/vast.py,sha256=tpvmHi7IkQNzbbHVkeo04kUSajoEpSzXr2XgeO_I1LU,695
@@ -43,7 +43,7 @@ sky/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  sky/benchmark/benchmark_state.py,sha256=X8CXmuU9KgsDRhKedhFgjeRMUFWtQsjFs1qECvPG2yg,8723
44
44
  sky/benchmark/benchmark_utils.py,sha256=7rf-iHt6RXZ_pnBBWOMwcdodHQW69x27xNyx0yVog1U,26385
45
45
  sky/client/__init__.py,sha256=pz6xvVSd9X-gwqbsDL0E9QOojYqM0KAD0j-NCyCIF1k,38
46
- sky/client/cli.py,sha256=ZSjxxHWxy9Vow7LXVts7a_NrCCDYRA_NypKsZXRdcP0,231896
46
+ sky/client/cli.py,sha256=_lCbPP2MDS1r5drdHSh7MIIwnsh08-SivUFzDoNqEi4,233657
47
47
  sky/client/common.py,sha256=E_5cjxd8fWRB7fU1yfIbiyQf-IyVhpD5KkB7Fl3cQEI,15215
48
48
  sky/client/sdk.py,sha256=i2YJpJMGs3nptN-yRzgPvQ3pWoRqTfm2RHP8-ImskaE,71381
49
49
  sky/clouds/__init__.py,sha256=OW6mJ-9hpJSBORCgt2LippLQEYZHNfnBW1mooRNNvxo,1416
@@ -57,7 +57,7 @@ sky/clouds/gcp.py,sha256=eCl0uJSCUtck4pbTTNPfveUU7dUjGAuRWFRm9yQBhbQ,58433
57
57
  sky/clouds/ibm.py,sha256=BDWY3VmQ_Wqg7WG58lnJ-94iI4g9rCKQkdee-Yf8CJ0,22168
58
58
  sky/clouds/kubernetes.py,sha256=zYmPJ_20wWikkolT6CjJM87-2i89yuV5kb1m3Tw5C38,38218
59
59
  sky/clouds/lambda_cloud.py,sha256=vfq4cjbHfONioOKlkx7Ct-2t3t14qg6aU4A8JEPWzoQ,12942
60
- sky/clouds/nebius.py,sha256=cojWNz1aEkgUdTjvf_1b4YdMRELmeMPP8jbAw_tOzM8,15486
60
+ sky/clouds/nebius.py,sha256=Oe9_lUXC3V8unVowXFPLvNDK2txXKlh26-2cIvp-dts,15447
61
61
  sky/clouds/oci.py,sha256=QvDNjRDmraDVUfXUgHuqpIc0sJ4Bw0Xg-754Tq3P_RU,27842
62
62
  sky/clouds/paperspace.py,sha256=nbLe2kujPI0t8H61wVEbHR6z_PNl9g0J42f55YbLux0,11222
63
63
  sky/clouds/runpod.py,sha256=mwGBbaVJvo9CMny-fLFizDImoEkBv8cS1TZYE3-UnwY,12617
@@ -101,14 +101,14 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
101
101
  sky/clouds/utils/gcp_utils.py,sha256=YtuS4EoAMvcRnGPgE_WLENPOPWIdvhp7dLceTw_zfas,7114
102
102
  sky/clouds/utils/oci_utils.py,sha256=0YxhgZdeIHQUI1AZ86YuswsZg5HdVCIVfSTRJsSHYI0,6396
103
103
  sky/clouds/utils/scp_utils.py,sha256=MqawUhhFHHxVnn29nOI4gJ_nF665ich4Po7bsy1afsA,15948
104
- sky/dashboard/out/404.html,sha256=Zdf8Br_d4K7L6W_B3OssPONah-2J4YhhyJgrCZfV25c,2296
105
- sky/dashboard/out/clusters.html,sha256=mM7kGX1MwIBYn-Y_C9aHmkU_1OkZ8cDrZkBmwlr8lsI,11739
104
+ sky/dashboard/out/404.html,sha256=zOoAwY8Ml5QSXK4cPsX6MhyzB38QWuGwuN-du8Y8P20,2296
105
+ sky/dashboard/out/clusters.html,sha256=-pRd0ljHhF_aMxHlwKm2NBd6nYicqV7BUzs47Wx8PMc,11739
106
106
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
107
- sky/dashboard/out/index.html,sha256=n2a774RFXMeyQcWbwW5B2o4EH1QLCiiU4z5Z1sJr1xw,1407
108
- sky/dashboard/out/jobs.html,sha256=RqTO03tNGnzDffZ_AYtUThptj_73XKHsOhQCNmPynyk,12829
107
+ sky/dashboard/out/index.html,sha256=JWR0JhoLWu1oO7x9bNzza2zuqomvr31u3DQR0y2MozE,1407
108
+ sky/dashboard/out/jobs.html,sha256=2p69iFGFKEsApHbPHlCiDtiD191TYS9d1W98pzI4zzU,12829
109
109
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
110
- sky/dashboard/out/_next/static/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js,sha256=7uuHw3t0SwdYow3LY25GpA5209nWYOYSjxRWmQ5if60,1048
111
- sky/dashboard/out/_next/static/GWvVBSCS7FmUiVmjaL1a7/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
110
+ sky/dashboard/out/_next/static/XGMId9CZTvpE82L-EIMuY/_buildManifest.js,sha256=7uuHw3t0SwdYow3LY25GpA5209nWYOYSjxRWmQ5if60,1048
111
+ sky/dashboard/out/_next/static/XGMId9CZTvpE82L-EIMuY/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
112
112
  sky/dashboard/out/_next/static/chunks/236-2db3ee3fba33dd9e.js,sha256=c6zARNqhT9VG1xQb_IXT_tuCvfGsglNIWWn93eCDkZo,24840
113
113
  sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js,sha256=H8yGnoxM_IYM2kU-A7mESi4aV4Ph3PxbIdnM2v5Kd3M,25150
114
114
  sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js,sha256=1w7y8HAPvOZ-KtEzw8mdTqqZvxUEMPJ8U-capQ-SH0c,8107
@@ -130,9 +130,9 @@ sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.
130
130
  sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-6ac338bc2239cb45.js,sha256=ciMtxEIartNtC_Y66ZBfZj0todScMGOZ4XchdgesEwo,8913
131
131
  sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-1c519e1afc523dc9.js,sha256=oMjs5t_YqMrm-nDMPyazBuKyCKocY-Hp1pgWQ4_ncDc,13420
132
132
  sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css,sha256=V9pn7LZ7uXLy3EQjFl-5MydGktBkn2yM4SWccJF9Sm0,31944
133
- sky/dashboard/out/clusters/[cluster].html,sha256=TKgRaRarv6ynFdwLpVcPWM9jFEa_ZHtzIK2S3B2t9cY,1984
134
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=ex6aWB9hCWe_vSisKSw43aCR4Z_nmHp6wUDrHEykzY0,1653
135
- sky/dashboard/out/jobs/[job].html,sha256=xQJk98q0AsWws8p6W71mvVQ4gqrjDO6uudcmMuxMXhY,1621
133
+ sky/dashboard/out/clusters/[cluster].html,sha256=YRsanZlLaslI96DOIqca4DCVvwWpqx_9kUSKSiDQiXs,1984
134
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=AM38muPNyV9YagoRFCuaiRCA7wRmmAKhq8w3DhHcais,1653
135
+ sky/dashboard/out/jobs/[job].html,sha256=g4ldKW6x7sZFZe6wrjtjoNAWMqRLSrwOLMU7GdcDkCU,1621
136
136
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
137
137
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
138
138
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
@@ -199,7 +199,7 @@ sky/provision/kubernetes/constants.py,sha256=dZCUV8FOO9Gct80sdqeubKnxeW3CGl-u5mx
199
199
  sky/provision/kubernetes/instance.py,sha256=n8SY7dbH_SJRr0XWYZIRVSN1drpN5kZcwri359GshSo,58700
200
200
  sky/provision/kubernetes/network.py,sha256=PEy7lZvmoysmormB49JW245tRcy4owAXzDGV5KHVPEI,12672
201
201
  sky/provision/kubernetes/network_utils.py,sha256=6uck1aBkgtm-gGBitU3_hEUp8j14ZuG_4Xo70ReZYXs,11654
202
- sky/provision/kubernetes/utils.py,sha256=r48JmZNRORkyQLBd9yLTut8_mm5K0DuII1qw1jplZNE,129738
202
+ sky/provision/kubernetes/utils.py,sha256=CGDeSO4lIEVTIS1dGfYZyR5PED9SuGpsPpNPdrXdrf8,130025
203
203
  sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml,sha256=S87GNAbDqgTrLuxF-afPAqQ0V-i41El4s_9KBZMuaag,1331
204
204
  sky/provision/lambda_cloud/__init__.py,sha256=6EEvSgtUeEiup9ivIFevHmgv0GqleroO2X0K7TRa2nE,612
205
205
  sky/provision/lambda_cloud/config.py,sha256=jq1iLzp4Up61r4JGxvtpVbJlgXnea3LHYQhCQyyl7ik,272
@@ -208,7 +208,7 @@ sky/provision/lambda_cloud/lambda_utils.py,sha256=G1dciGF8U3OGYk0-1pc3IDsT8AyA8A
208
208
  sky/provision/nebius/__init__.py,sha256=30I3181mu0W5g9fNvaWMPoBJZoGZ9RibuTpBH9P2pDg,558
209
209
  sky/provision/nebius/config.py,sha256=LK9kTDp2w6zZrn3vNdcSGgsgS-dL_j63Nh4_u3pqNiA,321
210
210
  sky/provision/nebius/instance.py,sha256=kfpZqwh56XV7h6XsX5dGJYilsVdRhC1EUgk0flaCo_E,11889
211
- sky/provision/nebius/utils.py,sha256=o1Jr_pzH-2uk34obt9pSGXf2i2tljOo-uhXcryfFUxs,13145
211
+ sky/provision/nebius/utils.py,sha256=jhkwOjq1hbIrgx27FjLBBBcphbb0--3K7k3MxLzlV68,12043
212
212
  sky/provision/oci/__init__.py,sha256=5E6EUtTK3mqGVREw5TuVl5DxteBYTZigIii7c8gHExU,612
213
213
  sky/provision/oci/config.py,sha256=diSDTyHLokcuXGB2XgZCHFvsXa8bah1PP2XuMouW_UU,1650
214
214
  sky/provision/oci/instance.py,sha256=rVGee5y0qkoeLIP5vPDmLq1N8G1n8mru62VHb0Bv5iY,16784
@@ -272,7 +272,7 @@ sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
272
272
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
273
  sky/server/requests/event_loop.py,sha256=OhpPbuce65bbjpGRlcJa78AVnYSm08SzFKt70ypCUuQ,1211
274
274
  sky/server/requests/executor.py,sha256=BUD9JZP_K8Ldvak0tRODvyBRUx3L_FuMHNHu832ZZjE,19793
275
- sky/server/requests/payloads.py,sha256=7Ect-lsw4fem0BOMxFbyt1nUCucLPf52Kfblo-BlHUs,16934
275
+ sky/server/requests/payloads.py,sha256=4BfJHVk_onDwc4H6rDWyyr0VJAwIJWMAKhHbijEm064,17016
276
276
  sky/server/requests/preconditions.py,sha256=ipxIb_3JXG6S3-ymcOdqQNb7VDvoPqADxu9ZK7-nQWc,7179
277
277
  sky/server/requests/process.py,sha256=uv6JmqdT1vR6S5j3a0CEmxz3fUoKQoZCryQsjZpZE7E,8734
278
278
  sky/server/requests/requests.py,sha256=9ovdQE-zv_Mvc6IbGATHVyQlOxSKjg_OankZbgDVGeE,21338
@@ -351,10 +351,10 @@ sky/utils/cluster_utils.py,sha256=s6DFRXktv6_gF_DnwDEXJ7CniifHp8CAPeGciRCbXgI,14
351
351
  sky/utils/command_runner.py,sha256=f4jLG47V_0diWVRdpwP3YRaQvCSk79dnTdpedlykeqM,39501
352
352
  sky/utils/command_runner.pyi,sha256=SDwvKvwaK4_-l2S3bwKSHZX8tGKU5SkbKuYRDn03o7o,7810
353
353
  sky/utils/common.py,sha256=P4oVXFATUYgkruHX92cN12SJBtfb8DiOOYZtbN1kvP0,1927
354
- sky/utils/common_utils.py,sha256=UM2eSQNdXRvAzlbfC839E7-7DXC9BMMUkquLsmYpu8w,31619
354
+ sky/utils/common_utils.py,sha256=zTfM-Sp0JiDYuZM80gMWtAVYwtdNyT1oja-4iuShmJc,31615
355
355
  sky/utils/config_utils.py,sha256=v8yZcr8OvEfXmBDYcdOj3U-AH1XERY76zGJMNdqzvqc,10339
356
356
  sky/utils/control_master_utils.py,sha256=iD4M0onjYOdZ2RuxjwMBl4KhafHXJzuHjvqlBUnu-VE,1450
357
- sky/utils/controller_utils.py,sha256=cPmQ3Q5eEmwER6_oZdPqPoqQOxgewJ8z7JhNJbKF-BM,52578
357
+ sky/utils/controller_utils.py,sha256=HNEfHe_YIF0K4yTgKpuOOHYSMpLaMsEx5m5XgR1Ug34,53176
358
358
  sky/utils/dag_utils.py,sha256=sAus0aL1wtuuFZSDnpO4LY-6WK4u5iJY952oWQzHo3Y,7532
359
359
  sky/utils/db_utils.py,sha256=K2-OHPg0FeHCarevMdWe0IWzm6wWumViEeYeJuGoFUE,3747
360
360
  sky/utils/env_options.py,sha256=aaD6GoYK0LaZIqjOEZ-R7eccQuiRriW3EuLWtOI5En8,1578
@@ -365,7 +365,7 @@ sky/utils/registry.py,sha256=I08nS0rvCF-xR5GEZoHEVgN1jcOeglz77h7xPpBCIjU,4179
365
365
  sky/utils/resources_utils.py,sha256=GbmD95DPwPB7xCnczhEpcopY16PUD6a37Xlq3U8mAe4,10530
366
366
  sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
367
367
  sky/utils/rich_utils.py,sha256=PK5nVUFRMvg7ngYoIxZU6Ldcyiy3VfXriOLgNFkv53g,12980
368
- sky/utils/schemas.py,sha256=V_Y37FUOrYkW3wj_qqqKvWb2Nu8tdiIZo0wjYdw4GEw,32580
368
+ sky/utils/schemas.py,sha256=wSSph_7m5_Bhlw3v9AtA2YMJjkd7GqbiulUiZ8Kd7do,33112
369
369
  sky/utils/status_lib.py,sha256=zn_MSuRYQdNKF8pnFOGQ54X_s_R7dyqWS6Q3a9zENw8,1512
370
370
  sky/utils/subprocess_utils.py,sha256=yM2WumV49gSKuZs0v6E3R8XKl5Q9b6veIzi6us5ORU8,15927
371
371
  sky/utils/timeline.py,sha256=ob6s3bc7nwAuSI76yLKBrSR5bzOHnOhbozz1avwoet4,4070
@@ -388,9 +388,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488
388
388
  sky/utils/kubernetes/kubernetes_deploy_utils.py,sha256=HPVgNt-wbCVPd9dpDFiA7t2mzQLpjXHJ61eiwRbEr-c,10378
389
389
  sky/utils/kubernetes/rsync_helper.sh,sha256=MT29sI5iD2QxYlXFwrN16oq0Er4TPFQVs4Z4A3U4a7Q,2483
390
390
  sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
391
- skypilot_nightly-1.0.0.dev20250502.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
392
- skypilot_nightly-1.0.0.dev20250502.dist-info/METADATA,sha256=JDgNtxXpubRAcjzKjsXTOsYIHg5b6q_wyUEa6Eg6k3Y,18489
393
- skypilot_nightly-1.0.0.dev20250502.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
394
- skypilot_nightly-1.0.0.dev20250502.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
395
- skypilot_nightly-1.0.0.dev20250502.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
396
- skypilot_nightly-1.0.0.dev20250502.dist-info/RECORD,,
391
+ skypilot_nightly-1.0.0.dev20250506.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
392
+ skypilot_nightly-1.0.0.dev20250506.dist-info/METADATA,sha256=CU8b_ayCZn7xR8PkuKMpnLsf58TIK0ecxBK9Ddnygcw,18489
393
+ skypilot_nightly-1.0.0.dev20250506.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
394
+ skypilot_nightly-1.0.0.dev20250506.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
395
+ skypilot_nightly-1.0.0.dev20250506.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
396
+ skypilot_nightly-1.0.0.dev20250506.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.1.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5