skypilot-nightly 1.0.0.dev20250708__py3-none-any.whl → 1.0.0.dev20250710__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 (54) hide show
  1. sky/__init__.py +2 -2
  2. sky/backends/cloud_vm_ray_backend.py +6 -4
  3. sky/clouds/kubernetes.py +2 -2
  4. sky/dashboard/out/404.html +1 -1
  5. sky/dashboard/out/_next/static/{O3wBEOmvYEVEqZxAP7Czn → P2Di1JdUlHuKN2lBws4Mr}/_buildManifest.js +1 -1
  6. sky/dashboard/out/_next/static/chunks/8969-13bb52ce3cffa4e3.js +1 -0
  7. sky/dashboard/out/_next/static/chunks/{webpack-9a81ea998672c303.js → webpack-fd62f17bd9ce1fcc.js} +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/config.html +1 -1
  12. sky/dashboard/out/index.html +1 -1
  13. sky/dashboard/out/infra/[context].html +1 -1
  14. sky/dashboard/out/infra.html +1 -1
  15. sky/dashboard/out/jobs/[job].html +1 -1
  16. sky/dashboard/out/jobs.html +1 -1
  17. sky/dashboard/out/users.html +1 -1
  18. sky/dashboard/out/volumes.html +1 -1
  19. sky/dashboard/out/workspace/new.html +1 -1
  20. sky/dashboard/out/workspaces/[name].html +1 -1
  21. sky/dashboard/out/workspaces.html +1 -1
  22. sky/global_user_state.py +7 -4
  23. sky/jobs/constants.py +1 -1
  24. sky/jobs/controller.py +7 -0
  25. sky/jobs/server/core.py +2 -1
  26. sky/jobs/server/utils.py +81 -0
  27. sky/jobs/state.py +55 -33
  28. sky/jobs/utils.py +34 -3
  29. sky/provision/kubernetes/instance.py +17 -0
  30. sky/provision/kubernetes/utils.py +5 -0
  31. sky/provision/provisioner.py +20 -0
  32. sky/server/metrics.py +2 -3
  33. sky/server/requests/executor.py +2 -5
  34. sky/server/requests/payloads.py +1 -0
  35. sky/server/requests/requests.py +94 -4
  36. sky/server/server.py +19 -5
  37. sky/server/uvicorn.py +4 -1
  38. sky/skylet/constants.py +1 -6
  39. sky/skylet/job_lib.py +30 -8
  40. sky/skypilot_config.py +4 -2
  41. sky/task.py +17 -0
  42. sky/users/permission.py +3 -0
  43. sky/utils/common_utils.py +13 -0
  44. sky/utils/db_utils.py +16 -0
  45. sky/utils/schemas.py +6 -0
  46. sky/utils/ux_utils.py +2 -4
  47. {skypilot_nightly-1.0.0.dev20250708.dist-info → skypilot_nightly-1.0.0.dev20250710.dist-info}/METADATA +1 -1
  48. {skypilot_nightly-1.0.0.dev20250708.dist-info → skypilot_nightly-1.0.0.dev20250710.dist-info}/RECORD +53 -52
  49. sky/dashboard/out/_next/static/chunks/8969-909d53833da080cb.js +0 -1
  50. /sky/dashboard/out/_next/static/{O3wBEOmvYEVEqZxAP7Czn → P2Di1JdUlHuKN2lBws4Mr}/_ssgManifest.js +0 -0
  51. {skypilot_nightly-1.0.0.dev20250708.dist-info → skypilot_nightly-1.0.0.dev20250710.dist-info}/WHEEL +0 -0
  52. {skypilot_nightly-1.0.0.dev20250708.dist-info → skypilot_nightly-1.0.0.dev20250710.dist-info}/entry_points.txt +0 -0
  53. {skypilot_nightly-1.0.0.dev20250708.dist-info → skypilot_nightly-1.0.0.dev20250710.dist-info}/licenses/LICENSE +0 -0
  54. {skypilot_nightly-1.0.0.dev20250708.dist-info → skypilot_nightly-1.0.0.dev20250710.dist-info}/top_level.txt +0 -0
sky/skylet/job_lib.py CHANGED
@@ -63,6 +63,7 @@ class JobInfoLoc(enum.IntEnum):
63
63
  RESOURCES = 8
64
64
  PID = 9
65
65
  LOG_PATH = 10
66
+ METADATA = 11
66
67
 
67
68
 
68
69
  def create_table(cursor, conn):
@@ -103,7 +104,8 @@ def create_table(cursor, conn):
103
104
  end_at FLOAT DEFAULT NULL,
104
105
  resources TEXT DEFAULT NULL,
105
106
  pid INTEGER DEFAULT -1,
106
- log_dir TEXT DEFAULT NULL)""")
107
+ log_dir TEXT DEFAULT NULL,
108
+ metadata TEXT DEFAULT '{}')""")
107
109
 
108
110
  cursor.execute("""CREATE TABLE IF NOT EXISTS pending_jobs(
109
111
  job_id INTEGER,
@@ -118,6 +120,12 @@ def create_table(cursor, conn):
118
120
  'INTEGER DEFAULT -1')
119
121
  db_utils.add_column_to_table(cursor, conn, 'jobs', 'log_dir',
120
122
  'TEXT DEFAULT NULL')
123
+ db_utils.add_column_to_table(cursor,
124
+ conn,
125
+ 'jobs',
126
+ 'metadata',
127
+ 'TEXT DEFAULT \'{}\'',
128
+ value_to_replace_existing_entries='{}')
121
129
  conn.commit()
122
130
 
123
131
 
@@ -338,16 +346,19 @@ def make_job_command_with_user_switching(username: str,
338
346
 
339
347
 
340
348
  @init_db
341
- def add_job(job_name: str, username: str, run_timestamp: str,
342
- resources_str: str) -> Tuple[int, str]:
349
+ def add_job(job_name: str,
350
+ username: str,
351
+ run_timestamp: str,
352
+ resources_str: str,
353
+ metadata: str = '{}') -> Tuple[int, str]:
343
354
  """Atomically reserve the next available job id for the user."""
344
355
  assert _DB is not None
345
356
  job_submitted_at = time.time()
346
357
  # job_id will autoincrement with the null value
347
358
  _DB.cursor.execute(
348
- 'INSERT INTO jobs VALUES (null, ?, ?, ?, ?, ?, ?, null, ?, 0, null)',
359
+ 'INSERT INTO jobs VALUES (null, ?, ?, ?, ?, ?, ?, null, ?, 0, null, ?)',
349
360
  (job_name, username, job_submitted_at, JobStatus.INIT.value,
350
- run_timestamp, None, resources_str))
361
+ run_timestamp, None, resources_str, metadata))
351
362
  _DB.conn.commit()
352
363
  rows = _DB.cursor.execute('SELECT job_id FROM jobs WHERE run_timestamp=(?)',
353
364
  (run_timestamp,))
@@ -569,6 +580,7 @@ def _get_records_from_rows(rows) -> List[Dict[str, Any]]:
569
580
  'end_at': row[JobInfoLoc.END_AT.value],
570
581
  'resources': row[JobInfoLoc.RESOURCES.value],
571
582
  'pid': row[JobInfoLoc.PID.value],
583
+ 'metadata': json.loads(row[JobInfoLoc.METADATA.value]),
572
584
  })
573
585
  return records
574
586
 
@@ -839,7 +851,7 @@ def format_job_queue(jobs: List[Dict[str, Any]]):
839
851
  """
840
852
  job_table = log_utils.create_table([
841
853
  'ID', 'NAME', 'USER', 'SUBMITTED', 'STARTED', 'DURATION', 'RESOURCES',
842
- 'STATUS', 'LOG'
854
+ 'STATUS', 'LOG', 'GIT COMMIT'
843
855
  ])
844
856
  for job in jobs:
845
857
  job_table.add_row([
@@ -854,6 +866,7 @@ def format_job_queue(jobs: List[Dict[str, Any]]):
854
866
  job['resources'],
855
867
  job['status'].colored_str(),
856
868
  job['log_path'],
869
+ job.get('metadata', {}).get('git_commit', '-'),
857
870
  ])
858
871
  return job_table
859
872
 
@@ -1055,7 +1068,7 @@ class JobLibCodeGen:
1055
1068
 
1056
1069
  @classmethod
1057
1070
  def add_job(cls, job_name: Optional[str], username: str, run_timestamp: str,
1058
- resources_str: str) -> str:
1071
+ resources_str: str, metadata: str) -> str:
1059
1072
  if job_name is None:
1060
1073
  job_name = '-'
1061
1074
  code = [
@@ -1066,11 +1079,20 @@ class JobLibCodeGen:
1066
1079
  '\nif int(constants.SKYLET_VERSION) < 9: '
1067
1080
  'raise RuntimeError("SkyPilot runtime is too old, which does not '
1068
1081
  'support submitting jobs.")',
1069
- '\nresult = job_lib.add_job('
1082
+ '\nresult = None',
1083
+ '\nif int(constants.SKYLET_VERSION) < 15: '
1084
+ '\n result = job_lib.add_job('
1070
1085
  f'{job_name!r},'
1071
1086
  f'{username!r},'
1072
1087
  f'{run_timestamp!r},'
1073
1088
  f'{resources_str!r})',
1089
+ '\nelse: '
1090
+ '\n result = job_lib.add_job('
1091
+ f'{job_name!r},'
1092
+ f'{username!r},'
1093
+ f'{run_timestamp!r},'
1094
+ f'{resources_str!r},'
1095
+ f'metadata={metadata!r})',
1074
1096
  ('\nif isinstance(result, tuple):'
1075
1097
  '\n print("Job ID: " + str(result[0]), flush=True)'
1076
1098
  '\n print("Log Dir: " + str(result[1]), flush=True)'
sky/skypilot_config.py CHANGED
@@ -573,7 +573,8 @@ def _reload_config_as_server() -> None:
573
573
  with _DB_USE_LOCK:
574
574
  sqlalchemy_engine = sqlalchemy.create_engine(db_url,
575
575
  poolclass=NullPool)
576
- Base.metadata.create_all(bind=sqlalchemy_engine)
576
+ db_utils.add_tables_to_db_sqlalchemy(Base.metadata,
577
+ sqlalchemy_engine)
577
578
 
578
579
  def _get_config_yaml_from_db(
579
580
  key: str) -> Optional[config_utils.Config]:
@@ -859,7 +860,8 @@ def update_api_server_config_no_lock(config: config_utils.Config) -> None:
859
860
  with _DB_USE_LOCK:
860
861
  sqlalchemy_engine = sqlalchemy.create_engine(existing_db_url,
861
862
  poolclass=NullPool)
862
- Base.metadata.create_all(bind=sqlalchemy_engine)
863
+ db_utils.add_tables_to_db_sqlalchemy(Base.metadata,
864
+ sqlalchemy_engine)
863
865
 
864
866
  def _set_config_yaml_to_db(key: str,
865
867
  config: config_utils.Config):
sky/task.py CHANGED
@@ -255,6 +255,7 @@ class Task:
255
255
  # Internal use only.
256
256
  file_mounts_mapping: Optional[Dict[str, str]] = None,
257
257
  volume_mounts: Optional[List[volume_lib.VolumeMount]] = None,
258
+ metadata: Optional[Dict[str, Any]] = None,
258
259
  ):
259
260
  """Initializes a Task.
260
261
 
@@ -313,6 +314,7 @@ class Task:
313
314
  is used.) The base docker image that this Task will be built on.
314
315
  Defaults to 'gpuci/miniforge-cuda:11.4-devel-ubuntu18.04'.
315
316
  blocked_resources: A set of resources that this task cannot run on.
317
+ metadata: A dictionary of metadata to be added to the task.
316
318
  """
317
319
  self.name = name
318
320
  self.run = run
@@ -369,6 +371,8 @@ class Task:
369
371
  self.volume_mounts: Optional[List[volume_lib.VolumeMount]] = (
370
372
  volume_mounts)
371
373
 
374
+ self._metadata = metadata if metadata is not None else {}
375
+
372
376
  dag = sky.dag.get_current_dag()
373
377
  if dag is not None:
374
378
  dag.add(self)
@@ -503,6 +507,8 @@ class Task:
503
507
  'Workdir must be a valid directory (or '
504
508
  f'a symlink to a directory). {user_workdir} not found.')
505
509
 
510
+ self._metadata['git_commit'] = common_utils.get_git_commit(self.workdir)
511
+
506
512
  @staticmethod
507
513
  def from_yaml_config(
508
514
  config: Dict[str, Any],
@@ -599,6 +605,7 @@ class Task:
599
605
  event_callback=config.pop('event_callback', None),
600
606
  file_mounts_mapping=config.pop('file_mounts_mapping', None),
601
607
  volumes=config.pop('volumes', None),
608
+ metadata=config.pop('_metadata', None),
602
609
  )
603
610
 
604
611
  # Create lists to store storage objects inlined in file_mounts.
@@ -872,6 +879,14 @@ class Task:
872
879
  f'num_nodes should be a positive int. Got: {num_nodes}')
873
880
  self._num_nodes = num_nodes
874
881
 
882
+ @property
883
+ def metadata(self) -> Dict[str, Any]:
884
+ return self._metadata
885
+
886
+ @property
887
+ def metadata_json(self) -> str:
888
+ return json.dumps(self._metadata)
889
+
875
890
  @property
876
891
  def envs(self) -> Dict[str, str]:
877
892
  return self._envs
@@ -1588,6 +1603,8 @@ class Task:
1588
1603
  volume_mount.to_yaml_config()
1589
1604
  for volume_mount in self.volume_mounts
1590
1605
  ]
1606
+ # we manually check if its empty to not clog up the generated yaml
1607
+ add_if_not_none('_metadata', self._metadata if self._metadata else None)
1591
1608
  return config
1592
1609
 
1593
1610
  def get_required_cloud_features(
sky/users/permission.py CHANGED
@@ -15,6 +15,7 @@ from sky import sky_logging
15
15
  from sky.skylet import constants
16
16
  from sky.users import rbac
17
17
  from sky.utils import common_utils
18
+ from sky.utils import db_utils
18
19
 
19
20
  logging.getLogger('casbin.policy').setLevel(sky_logging.ERROR)
20
21
  logging.getLogger('casbin.role').setLevel(sky_logging.ERROR)
@@ -38,6 +39,8 @@ class PermissionService:
38
39
  if _enforcer_instance is None:
39
40
  _enforcer_instance = self
40
41
  engine = global_user_state.initialize_and_get_db()
42
+ db_utils.add_tables_to_db_sqlalchemy(
43
+ sqlalchemy_adapter.Base.metadata, engine)
41
44
  adapter = sqlalchemy_adapter.Adapter(engine)
42
45
  model_path = os.path.join(os.path.dirname(__file__),
43
46
  'model.conf')
sky/utils/common_utils.py CHANGED
@@ -11,6 +11,7 @@ import platform
11
11
  import random
12
12
  import re
13
13
  import socket
14
+ import subprocess
14
15
  import sys
15
16
  import time
16
17
  import typing
@@ -87,6 +88,18 @@ def generate_user_hash() -> str:
87
88
  return user_hash
88
89
 
89
90
 
91
+ def get_git_commit(path: Optional[str] = None) -> Optional[str]:
92
+ try:
93
+ result = subprocess.run(['git', 'rev-parse', 'HEAD'],
94
+ capture_output=True,
95
+ text=True,
96
+ cwd=path,
97
+ check=True)
98
+ return result.stdout.strip()
99
+ except subprocess.CalledProcessError:
100
+ return None
101
+
102
+
90
103
  def get_user_hash() -> str:
91
104
  """Returns a unique user-machine specific hash as a user id.
92
105
 
sky/utils/db_utils.py CHANGED
@@ -84,6 +84,22 @@ def add_column_to_table(
84
84
  conn.commit()
85
85
 
86
86
 
87
+ def add_tables_to_db_sqlalchemy(
88
+ metadata: sqlalchemy.MetaData,
89
+ engine: sqlalchemy.Engine,
90
+ ):
91
+ """Add tables to the database."""
92
+ for table in metadata.tables.values():
93
+ try:
94
+ table.create(bind=engine, checkfirst=True)
95
+ except (sqlalchemy_exc.OperationalError,
96
+ sqlalchemy_exc.ProgrammingError) as e:
97
+ if 'already exists' in str(e):
98
+ pass
99
+ else:
100
+ raise
101
+
102
+
87
103
  def add_column_to_table_sqlalchemy(
88
104
  session: 'Session',
89
105
  table_name: str,
sky/utils/schemas.py CHANGED
@@ -870,6 +870,9 @@ def get_task_schema():
870
870
  'type': 'array',
871
871
  'items': get_volume_mount_schema(),
872
872
  },
873
+ '_metadata': {
874
+ 'type': 'object',
875
+ },
873
876
  **_experimental_task_schema(),
874
877
  }
875
878
  }
@@ -1449,6 +1452,9 @@ def get_config_schema():
1449
1452
  }
1450
1453
  ]
1451
1454
  },
1455
+ 'requests_retention_hours': {
1456
+ 'type': 'integer',
1457
+ },
1452
1458
  }
1453
1459
  }
1454
1460
 
sky/utils/ux_utils.py CHANGED
@@ -253,9 +253,7 @@ def command_hint_messages(hint_type: CommandHintType,
253
253
  f'{BOLD}sky jobs logs {job_id}{RESET_BOLD}'
254
254
  f'\n{INDENT_SYMBOL}To stream controller logs:\t\t'
255
255
  f'{BOLD}sky jobs logs --controller {job_id}{RESET_BOLD}'
256
- f'\n{INDENT_SYMBOL}To view all managed jobs:\t\t'
257
- f'{BOLD}sky jobs queue{RESET_BOLD}'
258
- f'\n{INDENT_LAST_SYMBOL}To view managed job dashboard:\t\t'
259
- f'{BOLD}sky jobs dashboard{RESET_BOLD}')
256
+ f'\n{INDENT_LAST_SYMBOL}To view all managed jobs:\t\t'
257
+ f'{BOLD}sky jobs queue{RESET_BOLD}')
260
258
  else:
261
259
  raise ValueError(f'Invalid hint type: {hint_type}')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250708
3
+ Version: 1.0.0.dev20250710
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,4 +1,4 @@
1
- sky/__init__.py,sha256=2m87hTVZYhVtroMcDUmk2ARgl6amW0fR_wkXuI6H2L8,6419
1
+ sky/__init__.py,sha256=YreJsIF48ci3aEqe2XYTNIe9HRkwwnOdWSxHsteefoM,6419
2
2
  sky/admin_policy.py,sha256=FMiizgvVTmD9gFA2OUaveXnuY3lbNU-fCbUYAODBZj4,9427
3
3
  sky/authentication.py,sha256=V7zGSV7bqcAKC_EGOOS0KhJ01ZFLnme0WnjLFO7zavs,25603
4
4
  sky/check.py,sha256=R0pFsTq2v-wr3NFePlX9DmDhsbvWEoFJAXsys3pUmT4,30338
@@ -8,13 +8,13 @@ sky/core.py,sha256=5UbaZ5xamYTajEq4TyiT81Q_cVzqPnMQRXASSz4OcNg,56272
8
8
  sky/dag.py,sha256=5MFXlP43y9U54zxfYGhVyBiWEInoFFlt_zJ7ASJntXw,3889
9
9
  sky/exceptions.py,sha256=Vn7VVhyrTaMBTdVxsro325aKSMM4_KRJOghFX31xIVM,19164
10
10
  sky/execution.py,sha256=BhI4paGKpXMhWJoelHFe7LGFbCnW7hl0rIAmdIay-dk,33223
11
- sky/global_user_state.py,sha256=8_oKM5l5aey_IadFC6beiilfsbG10J27sqVxnHxFc7A,73040
11
+ sky/global_user_state.py,sha256=an2P_UVhFpdBn85X4DpCHnrpEgC6aoKPw8ccxxj9K1c,73137
12
12
  sky/models.py,sha256=Eor-cT4D71QTimogcnJ5ey1G1PXK-OXN-snEtE8Uu_g,3152
13
13
  sky/optimizer.py,sha256=oE4NrDmyE1A9B5NI3T_s7QUV5HkCeSJUU75NoJoVIPI,63323
14
14
  sky/resources.py,sha256=MHdipCUpW2foB2romFIM57b__Lg4WCBfYDNSYAx2MEA,105546
15
15
  sky/sky_logging.py,sha256=cMurxhFExKEFX1frcMR71Ti_s9Obg9WY30veVxsZB6o,7285
16
- sky/skypilot_config.py,sha256=TjuYBU99GLhWD7E9ioAP7qiiHJybc5EY_T1A_rFW-rM,36222
17
- sky/task.py,sha256=ftmaGsxLoX8Uewzh45OjhlPDJu5n3060Za1S0X9i7M0,71076
16
+ sky/skypilot_config.py,sha256=3xJ5NlBEnnDIexZCQ_4AEkPY7kkNEvyMkvEvyU6ADFQ,36368
17
+ sky/task.py,sha256=wQelWSNWlB-rVt1GhqwijK9CxTL1f1FN0ESc-ZpjOto,71734
18
18
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  sky/adaptors/aws.py,sha256=4caUTO5nxZQyDVPyQdoPljaF-Lz_Fa6NEnu3FfmLZd4,8633
20
20
  sky/adaptors/azure.py,sha256=7l5jobSTsTUcTo3ptrgOpRgngHY92U64eQBPxvDe1HA,21986
@@ -35,7 +35,7 @@ sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
35
35
  sky/backends/__init__.py,sha256=tpa9gAygQopsiBUUuy3wVmr4E05FoPTFHIWqEo4i-u0,627
36
36
  sky/backends/backend.py,sha256=o47WUnB_h2nd_SkV0q0NTJ4vCwk23-KH5DgAm_JpKgE,7739
37
37
  sky/backends/backend_utils.py,sha256=AOuBC63KZQo5zy8fLnByy4OIGmrXiTwsz9g-XxFZ7Fw,145150
38
- sky/backends/cloud_vm_ray_backend.py,sha256=avTaPBTYhXd9CUMPUFxpC5pZtQriA9OHNHIzvG-sN5o,261671
38
+ sky/backends/cloud_vm_ray_backend.py,sha256=EGL3vy8uP8sGpltobJM3kjMzDbE1kFT01-qpnG3b0sk,261777
39
39
  sky/backends/docker_utils.py,sha256=Hyw1YY20EyghhEbYx6O2FIMDcGkNzBzV9TM7LFynei8,8358
40
40
  sky/backends/local_docker_backend.py,sha256=r80BGJZmAH8F49v6Y_pG3_pHmW5LQEQRusLkKoYoe9Q,17047
41
41
  sky/backends/wheel_utils.py,sha256=IUruJijm5854UGDdSayHbHzjjWRM46bATK1nSnK44xY,11071
@@ -92,7 +92,7 @@ sky/clouds/fluidstack.py,sha256=TkFHChRa7HH_-f5SDRgtFqKCmUCYcSfPCf4lpQH90do,1322
92
92
  sky/clouds/gcp.py,sha256=92qzPagPCabVScWMqbDh4Nd14LzcZnK5ojb_phw9bRA,68430
93
93
  sky/clouds/hyperbolic.py,sha256=cvcYeTs7js36OOXwehme4vzzjtDWqjPyqtxmb4XuUk4,11492
94
94
  sky/clouds/ibm.py,sha256=JQTJQ5wVxVSqH7O05GOld8X5iO16g6Idd_YmRAGZmB8,22567
95
- sky/clouds/kubernetes.py,sha256=Qu-GmEfy8IDigPHaDSQQeNPKH9k68H-FRI4ab8xFtuc,47947
95
+ sky/clouds/kubernetes.py,sha256=0og8H4h-liU7q9ywLjSYl0bUWi94jl5yK_lFf9vRG_0,47949
96
96
  sky/clouds/lambda_cloud.py,sha256=ZoKSseOGYlZFNhue2OK75dTU836AAE_pkuVod4yZX68,13260
97
97
  sky/clouds/nebius.py,sha256=0ceJUwl1kjwhTJOSDERke8jCrfRxeyb9nLMkQfjBktQ,20926
98
98
  sky/clouds/oci.py,sha256=Tos4hgXhYJ4kNkh6aa8_WsaxcD_JmbarR_1GltV-YrM,28158
@@ -108,19 +108,19 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
108
108
  sky/clouds/utils/gcp_utils.py,sha256=zpdibyvdROgDGqllcvQuST3pKqj6pzqX-gxCw-DsCfc,9873
109
109
  sky/clouds/utils/oci_utils.py,sha256=yv_Y9oM5WNCnOofu44aKyOPTZZdKfpFLCx3ewZ2VBFY,7994
110
110
  sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
111
- sky/dashboard/out/404.html,sha256=cUx0906JlcJsKNoEoUyaV9G7oHtgifRqsQV1TlVb164,1423
112
- sky/dashboard/out/clusters.html,sha256=agiI2ZkkBKXhhvNcJfUkMW_FEs-4SpOwzx63y4JN3Rw,1418
113
- sky/dashboard/out/config.html,sha256=fvv80Dyym6z2Mf-9e74yg0StvER5Qqypw9unDLg8a-w,1414
111
+ sky/dashboard/out/404.html,sha256=60Uzu66Ut1LutNJbNnrQGCh0SCY-Qwx9T4admd9Ylik,1423
112
+ sky/dashboard/out/clusters.html,sha256=tillHaHLTQsaKzAZw4nXpbMxXk6Jup_8h0Uf-4Yiu_k,1418
113
+ sky/dashboard/out/config.html,sha256=Pp7MJebLrNP8MV7KjoBYV2u8NqYTDpqu8iZjgmJiH0I,1414
114
114
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
115
- sky/dashboard/out/index.html,sha256=NgaE4sIkYBGYeQMa2jG9Kbs2ldBlCjFzf1pqP32cEPA,1407
116
- sky/dashboard/out/infra.html,sha256=djapoJeEBzqxrTX1kJWC-ON6k-cZ8z_rTDN0DpPQJ2g,1412
117
- sky/dashboard/out/jobs.html,sha256=ZiWwGLNouIOd6OAmngnKrcOtl6AJIXmaNsGFaz5VcF0,1410
115
+ sky/dashboard/out/index.html,sha256=yxdrRiXeu-TdOK3ELox3yYwfZw730Ub2thNmuFoa1ZE,1407
116
+ sky/dashboard/out/infra.html,sha256=6SHlr_XF0IgtksmtgyZtTEXH4N9-H8WyJWgnIi-ohS8,1412
117
+ sky/dashboard/out/jobs.html,sha256=0uTlv64nQIu41WMKjaNkf95G2L3ep-UrQ2-X6qvCp4U,1410
118
118
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
119
- sky/dashboard/out/users.html,sha256=xOmOz4CjIEuaA_w8rAXK10EsM-OTXwFJhzlQkwxG3nI,1412
120
- sky/dashboard/out/volumes.html,sha256=7yudeUFl-ga2pdzpvgT79uQx91SXJcTLFkHqFBko-bY,1416
121
- sky/dashboard/out/workspaces.html,sha256=0TivthxDR3hSrhl2F3bL8I6hr0_YRCV0zIaO94L_nzk,1422
122
- sky/dashboard/out/_next/static/O3wBEOmvYEVEqZxAP7Czn/_buildManifest.js,sha256=SMKLljkiS_9UQoF0v1MyY_ziwbXl8KnBBlwCuTRc3V8,2235
123
- sky/dashboard/out/_next/static/O3wBEOmvYEVEqZxAP7Czn/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
119
+ sky/dashboard/out/users.html,sha256=7sBj9KAv4sA0UhjBLpDyHe3g3P9HPX56-vRDb8W8OQY,1412
120
+ sky/dashboard/out/volumes.html,sha256=y8lNWlHj_m5jeZH3Ht2dBf2yjPILgmNGadI72ecSe9c,1416
121
+ sky/dashboard/out/workspaces.html,sha256=xyCTRERjoklKLEYw52tox_mtjkPl-U-xEmxv6ddfPHg,1422
122
+ sky/dashboard/out/_next/static/P2Di1JdUlHuKN2lBws4Mr/_buildManifest.js,sha256=873ePHVgFWslxvm9YCKz0P3CmFUQWhzepzASR7ZqAMM,2235
123
+ sky/dashboard/out/_next/static/P2Di1JdUlHuKN2lBws4Mr/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
124
124
  sky/dashboard/out/_next/static/chunks/1043-1b39779691bb4030.js,sha256=k8-hHIedPKi22M0wZwGOdWZ_S-H0jVnepFwm7i9_zg4,18192
125
125
  sky/dashboard/out/_next/static/chunks/1141-726e5a3f00b67185.js,sha256=lEAVPk_18NZpZuPrGx1Xy9VWqE_5n3JuqWbIPS1_ZMw,17823
126
126
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -145,7 +145,7 @@ sky/dashboard/out/_next/static/chunks/6601-fcfad0ddf92ec7ab.js,sha256=2YiVH71mJv
145
145
  sky/dashboard/out/_next/static/chunks/6989-6ff4e45dfb49d11d.js,sha256=CApsRgStyx9_RKLSE7wegJ51DcORjy2snKeEZMpejsM,9435
146
146
  sky/dashboard/out/_next/static/chunks/6990-d0dc765474fa0eca.js,sha256=6yYTJ0jYQvnwON-rVGIdusJM-oEtEx1FVrHFxX7YCBM,16116
147
147
  sky/dashboard/out/_next/static/chunks/804-9f5e98ce84d46bdd.js,sha256=yC-hYtK6OPB30EDHw7JG50eDF5-CufVV-lCg4__Fg-w,11465
148
- sky/dashboard/out/_next/static/chunks/8969-909d53833da080cb.js,sha256=OIRaPBjANlFx6cNep9YamuoXdpEH7OKhqTdjCgM70-I,9884
148
+ sky/dashboard/out/_next/static/chunks/8969-13bb52ce3cffa4e3.js,sha256=YrTrcR303uCovqxoDQRUBm8KKUmLGZ2fWIgYEjWVYBQ,9949
149
149
  sky/dashboard/out/_next/static/chunks/8982.a2e214068f30a857.js,sha256=fQlHyU9rqSfks7lbZ-C6FYSRjG_XyaPSw_gojuY7TeU,17059
150
150
  sky/dashboard/out/_next/static/chunks/9025.a7c44babfe56ce09.js,sha256=0ciCX9lNsRd3HNYlFQ29BXu2S-xCuoqUwGcrawVwiZM,10637
151
151
  sky/dashboard/out/_next/static/chunks/938-044ad21de8b4626b.js,sha256=cbzoiWQ1IkgyTfObKZsxVts30tFHFl_1e9_PQdcXCjs,25784
@@ -156,7 +156,7 @@ sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js,sha256=XKYUV
156
156
  sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js,sha256=zSukg-WO1Xy-B2xEIIGHXYApy2KOY9xWHcLqAYQvF3A,115883
157
157
  sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js,sha256=DPLM6ccDgTnITBgsqZPN3gmcI2szGCi9b_60PJZkTJQ,109885
158
158
  sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
159
- sky/dashboard/out/_next/static/chunks/webpack-9a81ea998672c303.js,sha256=fUbydZntvLJZCDi467P46nwf0uvI6VRaNnpvsLirfDs,4655
159
+ sky/dashboard/out/_next/static/chunks/webpack-fd62f17bd9ce1fcc.js,sha256=AbJls00G4461-JSM6NPX6ZhA4sjtmH6o8UG111HrEBM,4655
160
160
  sky/dashboard/out/_next/static/chunks/pages/_app-a37b06ddb64521fd.js,sha256=H1r6Y8kJC7-I-8jRr71VINRghHy_yaY6scBkjN4cyxw,7587
161
161
  sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js,sha256=D2OpMaqpdtCPyq6iPhZHuF2ekyMjleRchSNCLR6fqps,250
162
162
  sky/dashboard/out/_next/static/chunks/pages/clusters-9744c271a1642f76.js,sha256=wzNhCoIzkSiOuaTm9dGBVIYYIYWf4COJOklBr1aaLxE,859
@@ -174,13 +174,13 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-c4d5cfac7fbc0668.js,sha25
174
174
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js,sha256=K9tqKHcB2kiSHTAddLaM2oL1PzmqZNTdLDOuNzCaJNM,765
175
175
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-7c0187f43757a548.js,sha256=FsoenC6VRkPLE29KkLd4nlSq2qociH4zFexYMxgetOM,1530
176
176
  sky/dashboard/out/_next/static/css/0da6afe66176678a.css,sha256=I8b7x4ULdoXHkgk0BsNa0D6k2UYoA2mEhq7H1G_tVQE,44869
177
- sky/dashboard/out/clusters/[cluster].html,sha256=NM-HMqTyAzV-R2JNs3qnbViOfTycmUg3P3cByzw78kQ,2847
178
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=fYfmNXABLQjZ8wZLUn4iWBxNhJ7GdoTeyRmW6VZYh5M,2160
179
- sky/dashboard/out/infra/[context].html,sha256=RiwkWxB6fUaM5z_v990T-C-l1N3O3Uc_SKkC6uMTSos,1436
180
- sky/dashboard/out/jobs/[job].html,sha256=ZbWhC3gyI8ACf2fsHupfJrDJe5EKvTdMlpXG-P-Q7mY,2304
177
+ sky/dashboard/out/clusters/[cluster].html,sha256=FwfPnWrvB3J-nj0wav3KSLbXoXRjD2iFAYc69-7JJT8,2847
178
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=p-yfm7GwBCvmnTIhf2YDLhKfdCdPlmqtDJNenFIi_wQ,2160
179
+ sky/dashboard/out/infra/[context].html,sha256=c1qulozucYXnu9lL3AAA9w1JWFUdd1y5tsWL69mZh1c,1436
180
+ sky/dashboard/out/jobs/[job].html,sha256=lKsWkzV8qPgWYffZ1jJ3sup3vXTZyikz0ES3rLpq9ek,2304
181
181
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
182
- sky/dashboard/out/workspace/new.html,sha256=af4sIaen1YnffB1kT5IPustRH1PgkF78S_Ix-pyUxy8,1428
183
- sky/dashboard/out/workspaces/[name].html,sha256=PfZBShKwPOfYYKBhgD_aAFchecW4zjuVmEFVq1t_hfc,2845
182
+ sky/dashboard/out/workspace/new.html,sha256=_8i34c0NebZ-OY8F15UbGPlLe1411gwnx3e5fwqF0vU,1428
183
+ sky/dashboard/out/workspaces/[name].html,sha256=Zon7CN3K0l69pkBGi0diN4bWRl-tySU9nJyX0GvFAfs,2845
184
184
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
185
185
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
186
186
  sky/data/data_utils.py,sha256=CNYPM963qby5ddW0DZNbhiWXkqgB9MHh_jrC5DoBctM,33437
@@ -188,17 +188,18 @@ sky/data/mounting_utils.py,sha256=6f1d0EeBj4dY-LQPwh8EtI6yoEHZawDgHaC8LChDS2s,21
188
188
  sky/data/storage.py,sha256=ISEr9v880aiXcLr58LhsdL094NucaI_VsB_P2IVOhI0,236874
189
189
  sky/data/storage_utils.py,sha256=l6sx0r3j0F2mTcIVn1S7-4Y_vFRZcvwsVrG_CCacVR8,13856
190
190
  sky/jobs/__init__.py,sha256=qoI53-xXE0-SOkrLWigvhgFXjk7dWE0OTqGPYIk-kmM,1458
191
- sky/jobs/constants.py,sha256=5n6wcYVyOnllM39uJDQDv7hHILcdSwiyg_-tqMc7nJk,3305
192
- sky/jobs/controller.py,sha256=C-SrZ4MyNg30Rx-K7bpLf99V039QuW9m29_3vzVm8i0,35631
191
+ sky/jobs/constants.py,sha256=N7Bw_sSCL8cVd0NmKGXvAhyclR8Y-gJAair597umVo4,3305
192
+ sky/jobs/controller.py,sha256=kKnBMQs2XRg1TN80ToVWFwVdwKTuFE4TjQapb3V0iUI,36073
193
193
  sky/jobs/recovery_strategy.py,sha256=a9A4W-6U3KU-pjkWiFpIdgTHC8W26-jYrmi4vzU9iOg,28818
194
194
  sky/jobs/scheduler.py,sha256=b3RAjEzCXyoikh_BcmmGjoZ9ZeXr-tBnXoLFctt95ko,14375
195
- sky/jobs/state.py,sha256=HHERdEhuJ3QHMu5dvY2mHVJgtHzIkAI6F1Cv2Iz3Hvw,65516
196
- sky/jobs/utils.py,sha256=gfW4smCWWMmE4OwIbEqI5j5gVh5Gvfs6paqKQR2Tia8,70920
195
+ sky/jobs/state.py,sha256=DKbHHlT0VfgEP562H0YtrI4HBoy7pvgY2xEa9hkNF2c,66029
196
+ sky/jobs/utils.py,sha256=_V3LRBDjkp3ltTjg7wqn7tMuSSIOO3hQfMuLD5u-f50,72076
197
197
  sky/jobs/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  sky/jobs/client/sdk.py,sha256=Nw7bP8pJ-uLIi14kMekEtmzqPmdIiN-CbhoNCJlHA7s,11340
199
199
  sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
200
- sky/jobs/server/core.py,sha256=U9vkOAcg381yh_te-ZTXxDgQ1CrxAVzOx9dUkzXuELo,31992
200
+ sky/jobs/server/core.py,sha256=FVFNWGIHwRTwhvvU0TN_3C-h15uVZcvG6KTe0W3BPHY,32050
201
201
  sky/jobs/server/server.py,sha256=ae8JAs-2ipWqL_GsA3x8T2mY-OJLc3ioWg_CfRzCUIY,4011
202
+ sky/jobs/server/utils.py,sha256=q9KL1VGJ8TBIypzt3U9ozHd90QwRib7CBPrXZypMQ98,3496
202
203
  sky/logs/__init__.py,sha256=0ybWMfXcpAzh8dtDnJwpfovNIk0zJRJvzdISqFdKmdE,549
203
204
  sky/logs/agent.py,sha256=tv0C40_FauZpvU93Ro_mC23LnaXWhSTjqch1JQMXiqw,2771
204
205
  sky/logs/gcp.py,sha256=eKVEcHO3FJRg_YTcE9omE8uAIF6AdBWWpkEPqWFAqXg,3857
@@ -211,7 +212,7 @@ sky/provision/docker_utils.py,sha256=ev_f5ZebMZ4NYe6OxleisBO8EAB6W0FHFJlaqVK3ugE
211
212
  sky/provision/instance_setup.py,sha256=YjANEJoPSamKLav_BjoGiTOkFlGKoR_F1DlGuUFe-U0,26141
212
213
  sky/provision/logging.py,sha256=_sx_TH6nLt0FF3myS5pEZbiMhXyl4s1XwMidu_TTBUw,2091
213
214
  sky/provision/metadata_utils.py,sha256=LrxeV4wD2QPzNdXV_npj8q-pr35FatxBBjF_jSbpOT0,4013
214
- sky/provision/provisioner.py,sha256=qtCfoCUI1B9XHrN3VmAQjlEyI3_ZQgJDJyZAK-N_7Io,31450
215
+ sky/provision/provisioner.py,sha256=rzfGWSXWlC3A9D8v6oyWy6--40PydAz4qzqz8QN3GuE,32436
215
216
  sky/provision/aws/__init__.py,sha256=mxq8PeWJqUtalDozTNpbtENErRZ1ktEs8uf2aG9UUgU,731
216
217
  sky/provision/aws/config.py,sha256=2PifaPQpD-2Kxqd6843sCUIjEhJR3lI3cJRXE1ox_ls,26728
217
218
  sky/provision/aws/instance.py,sha256=cVW0aQU0Jvo86u4aqfbq29-XrEcgMFFZNIkVS2PvgH8,42295
@@ -249,10 +250,10 @@ sky/provision/hyperbolic/utils.py,sha256=NCa3ULvIi64-YHYoOnPd3SShlJ6VuQsEwaTBqHF
249
250
  sky/provision/kubernetes/__init__.py,sha256=xzVA9OCga0pCdUAQ7zZiCZMdq-Y0182oHlIKWESA15A,896
250
251
  sky/provision/kubernetes/config.py,sha256=iuKFZdivSaEOZf6PWz3JLju3bqyIuO58jTb9fFUn8nE,29632
251
252
  sky/provision/kubernetes/constants.py,sha256=vZJQsAVjAgwsOskB48tIFSXtNw7IFnJOQE_H6N-vOYQ,1130
252
- sky/provision/kubernetes/instance.py,sha256=VlwOQGhLS_yZwBtpb7d0V40O1I_VI0nDEjRrHIsTb8w,58910
253
+ sky/provision/kubernetes/instance.py,sha256=oQ_-QD6uAv4b32Q5kB_fRRE3iO_3xmVqPLbYBA0Wd08,59861
253
254
  sky/provision/kubernetes/network.py,sha256=Dgj8u7IQBHKHt-mSDhYzue1wfDk96FR_8fO89TwuZ2E,12846
254
255
  sky/provision/kubernetes/network_utils.py,sha256=eEbt8acJW3Ohe6qHZNZ9GAQ29kIZEQX7Q5S08yOuvhA,12220
255
- sky/provision/kubernetes/utils.py,sha256=OSU4m5eMuhDaIw3Verzt5B5L_dG46D0gN7nPZNEMDVw,143136
256
+ sky/provision/kubernetes/utils.py,sha256=kZiWGZ7vFUEK-owCpUMIK8kGesrPmSbMszcZrxf0AR0,143316
256
257
  sky/provision/kubernetes/volume.py,sha256=KaYls4QU_QNXoncAiySeUX479zuzeCeW2iB1tWtJe8w,8061
257
258
  sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml,sha256=S87GNAbDqgTrLuxF-afPAqQ0V-i41El4s_9KBZMuaag,1331
258
259
  sky/provision/lambda_cloud/__init__.py,sha256=6EEvSgtUeEiup9ivIFevHmgv0GqleroO2X0K7TRa2nE,612
@@ -324,22 +325,22 @@ sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
324
325
  sky/server/common.py,sha256=u7hV5oGdCj5GfCxpNmLd6yl0B1mlh11FMFIR5ZoW5pA,34492
325
326
  sky/server/config.py,sha256=XWf5Kw4am6vMO5wcyWevbQAFH-dmKb7AMEgDzD083-M,8538
326
327
  sky/server/constants.py,sha256=v6RP8ZEwCNsxO2s2IukgOcEldZO5bvcQaxmOTA0Cf0g,2321
327
- sky/server/metrics.py,sha256=aVRaSwpBVXE9dXIVd9bNsSigKM4bkqNq0eTpP0Noyo8,3657
328
+ sky/server/metrics.py,sha256=6H6n6dq_C5HMaU97mJlRUB9bqOEA_k205PO15wE3AWk,3648
328
329
  sky/server/rest.py,sha256=elMpi-cS301OqTwmFZb7fWYXr1vdJ28YT1zIDH1IpBk,5968
329
- sky/server/server.py,sha256=iauONRTcoQ872zVnAq6xEChmEJP0-qVr3odlWqeIXF4,72855
330
+ sky/server/server.py,sha256=OLWzK9SBfPwaBIdbMPxtngMEXCDQQuRC7ooOpw6d9kE,73466
330
331
  sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
331
332
  sky/server/stream_utils.py,sha256=RS4RuMxQqTGqp3uxzZVtmFWzos4d49P7hMX_VklzEVU,9189
332
- sky/server/uvicorn.py,sha256=s3PnFVCZh_6BB6Zw76K-jL-NmtDTEg8rlbuaRKbgVTQ,9125
333
+ sky/server/uvicorn.py,sha256=I-JUJwgUznt87hboDd66NTRaw0WtfFVzxxtoxowNqBg,9266
333
334
  sky/server/versions.py,sha256=3atZzUa7y1XeKNcrfVxKWAo_5ZyCOnbY7DKpIqed7Do,10011
334
335
  sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
335
336
  sky/server/html/token_page.html,sha256=eUndS5u1foL9vaWGPRTLMt7lCzD1g0wYJ2v_EeeFzlc,7046
336
337
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
338
  sky/server/requests/event_loop.py,sha256=OhpPbuce65bbjpGRlcJa78AVnYSm08SzFKt70ypCUuQ,1211
338
- sky/server/requests/executor.py,sha256=jp2_ypDMiAmcb-2Ms06JnMhmEHnvWMLKQlVoaSptV8E,26614
339
- sky/server/requests/payloads.py,sha256=P4Qv8fWQD6Xz7hP-dMvsA63SpPbWjYespgO5-ch2wik,23334
339
+ sky/server/requests/executor.py,sha256=_wQSD_3qAmXup5eTHs_GUzTRYemModz1gECsDRQmxg4,26424
340
+ sky/server/requests/payloads.py,sha256=UXulzuo5dY1uQTemYhAhYR0AL92AW6vxCdpI6ZgsxXk,23374
340
341
  sky/server/requests/preconditions.py,sha256=uUQjzFFHf7O5-WvBypMzqViGmd1CXksbqrrDPmY_s_Y,7178
341
342
  sky/server/requests/process.py,sha256=I0ToOcF_cMJi5TfZMJOn9rDmJYewQOV07Pnetzqj2IU,10805
342
- sky/server/requests/requests.py,sha256=AT4nJKCa2I13rVhZq929hMtZF5-So7w-gp9E_Ld60Xk,25193
343
+ sky/server/requests/requests.py,sha256=jp81kMjXkBVqQK2v4GtLQstXvMR0EOPOOsn88kYJh5g,28670
343
344
  sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
344
345
  sky/server/requests/queues/local_queue.py,sha256=X6VkBiUmgd_kfqIK1hCtMWG1b8GiZbY70TBiBR6c6GY,416
345
346
  sky/server/requests/queues/mp_queue.py,sha256=jDqP4Jd28U3ibSFyMR1DF9I2OWZrPZqFJrG5S6RFpyw,3403
@@ -354,9 +355,9 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
354
355
  sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
355
356
  sky/skylet/autostop_lib.py,sha256=kGUnHm-jpF4zl3UJfB-4pnoldWpnVeR96WwYGSw7em0,4630
356
357
  sky/skylet/configs.py,sha256=kV490lonYVVQMDRO2haizlt9fpQmqBIpwBScn14zS78,2132
357
- sky/skylet/constants.py,sha256=qbFqy7HDwEo85ttSR6l_xF6zXu6YyI0v4aFbhzOgCJY,23625
358
+ sky/skylet/constants.py,sha256=Axmn0vsjmEPmoa6nOda9TIpVdHINxO5qzzAisBml1mA,23486
358
359
  sky/skylet/events.py,sha256=pnV3ZiwWhXqTHpU5B5Y9Xwam_7FQDI6IrxgSx7X_NVA,12743
359
- sky/skylet/job_lib.py,sha256=aZ_lUU1u0HVU2AdTcYcFUAS7eeelK-bAbJlCoZ3QX7A,48267
360
+ sky/skylet/job_lib.py,sha256=YpjjUK836UokbDZhNjD5rg9SSKy8d9XnAb_3OgJD7cM,49163
360
361
  sky/skylet/log_lib.py,sha256=9nLOhevnM668itQyVyPSoQHKfZ2MWm_FwXPxK28X0oM,23201
361
362
  sky/skylet/log_lib.pyi,sha256=6LXFSpyW4lMHAELKllvK73B3538JjSo9lPw30DEuO0o,4542
362
363
  sky/skylet/skylet.py,sha256=mWmqCvxSlfdVU_L8NL6P52jmCt3smd8K0HdyNBfMPeI,1234
@@ -409,7 +410,7 @@ sky/usage/constants.py,sha256=mFrTgrFIfFf4kpcl-M1VDU7_moD5_mJazUJTUDrybms,1102
409
410
  sky/usage/usage_lib.py,sha256=PEjQH7do7lrcGMaIqW6bFQvNIFo-ipoF7L0xlt3vmDg,21427
410
411
  sky/users/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
411
412
  sky/users/model.conf,sha256=nPAaMai2fc-nlnEDTfW5Lyw6vgCcOS32BSms4aFOHoY,259
412
- sky/users/permission.py,sha256=5V5EiQOhBfq2xYinWQE9-wJYrLRSufsNY6EVw0uvNZc,15109
413
+ sky/users/permission.py,sha256=4G55ujboXgYH0N3kV-STxT2FpnIY27U1pskJqlDhuWQ,15256
413
414
  sky/users/rbac.py,sha256=3ZWukXo85u6zWbPmHcPsF9EtZ3cd_51PLZYf2h-7uAM,3636
414
415
  sky/users/server.py,sha256=59I2WITevRqvo-kEzmP0p0qyEYATnUQXTRvA_81xZYM,27922
415
416
  sky/users/token_service.py,sha256=nzIryoYSbw58SceBVRJ4VF7Z9beTSpYZd6WSyYYzK-s,7179
@@ -422,14 +423,14 @@ sky/utils/cluster_utils.py,sha256=s6DFRXktv6_gF_DnwDEXJ7CniifHp8CAPeGciRCbXgI,14
422
423
  sky/utils/command_runner.py,sha256=mPNdPhQX6TtQ7c5MTrdiMEx8yMcKrULMFQas66vJSpQ,43912
423
424
  sky/utils/command_runner.pyi,sha256=IS3qeCTgWys94KhaHx3S2Pty8qDWn_zFht7bgDLJFcw,9593
424
425
  sky/utils/common.py,sha256=nTg-mjNu0diZjs2UvyiMc84Tu1ZonRLRAmfqFIP1TtY,2242
425
- sky/utils/common_utils.py,sha256=ScD5ATvtuza7iiS70ajp6ReHyOyyvCubpT1nw6gwDRY,35848
426
+ sky/utils/common_utils.py,sha256=3cBop3bbR11XXsaxgH8oWK9YR8_F_cwvR7904LsRNU0,36285
426
427
  sky/utils/config_utils.py,sha256=RkTIbZaPbsvQjtj_4R7p4Jz6vIbdkvD-QPs1O5jjiHo,12003
427
428
  sky/utils/context.py,sha256=yEGvcKr9fKEeoAnNKiXDiky7dlLOChFdZYXGr0EeQ9g,9997
428
429
  sky/utils/context_utils.py,sha256=cby-QPmnGObjIE4K7eZ_dkWZdUo7YJUmnJr5oKf_v54,6712
429
430
  sky/utils/control_master_utils.py,sha256=iD4M0onjYOdZ2RuxjwMBl4KhafHXJzuHjvqlBUnu-VE,1450
430
431
  sky/utils/controller_utils.py,sha256=sl3KrjmU_0UvoNJVH-Aw9mfxdkHUe2Nkr8cwe7OA7H4,55366
431
432
  sky/utils/dag_utils.py,sha256=lqzmSPgmNGmil_7pcVdyf4a4BSC2rMcTAIKazSX_3qk,8514
432
- sky/utils/db_utils.py,sha256=MlJN4dVUEcMkLMn5rYi1F-WnD9ap2oOoF9lDiqlL0h4,5243
433
+ sky/utils/db_utils.py,sha256=pASuL-B_t-e7aS7wSgCW_EyqyRQqwUdHKvXC1dCgSkk,5704
433
434
  sky/utils/env_options.py,sha256=PaQGjem9nK4R8Y_YvCLkNZ891wWiS3t50hE8q2HLis0,1922
434
435
  sky/utils/infra_utils.py,sha256=WkkB4Hj6CX-3eV029fPYqydNVyFZ8ZwRAVA_GCLJ9QU,6981
435
436
  sky/utils/kubernetes_enums.py,sha256=imGqHSa8O07zD_6xH1SDMM7dBU5lF5fzFFlQuQy00QM,1384
@@ -440,12 +441,12 @@ sky/utils/resource_checker.py,sha256=N18XhoVIqjY1VzmKvxQxRchRgC2WIgcEQyHDkLvg4Y8
440
441
  sky/utils/resources_utils.py,sha256=zcJXHYQt6WtQHKuWEif1QP1NtSO7XQYJBaEs625yV1Y,15958
441
442
  sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
442
443
  sky/utils/rich_utils.py,sha256=ZKztFc0D5q7ma_NE2p9UKjVS9zqcJ3L53FRw6SPoUvg,14707
443
- sky/utils/schemas.py,sha256=uThhjgjxtf_13SEcnKq9Mrdkr_8xMmyNaihnwNoMwsU,52241
444
+ sky/utils/schemas.py,sha256=iIZxiSVsYwHrGq1Bz7j-bw9cD3QTvkD9wGV2dRyAau4,52409
444
445
  sky/utils/status_lib.py,sha256=QGkd6COD1GX1h30Mk9RMUdyeUOMJs5971GkxTcFgdsU,1705
445
446
  sky/utils/subprocess_utils.py,sha256=tOpFY_1ml7JkVGAN1o473lcKPklGR95qBCW61eu8kEo,15773
446
447
  sky/utils/tempstore.py,sha256=TvCVXnPHzy_BLAXHhWvUcldqOY8iXh1vEWtBGHcpbmo,1725
447
448
  sky/utils/timeline.py,sha256=ob6s3bc7nwAuSI76yLKBrSR5bzOHnOhbozz1avwoet4,4070
448
- sky/utils/ux_utils.py,sha256=hris-DNQR0-okNOzH2EZQJXBPWAn3LdAl3dtl9KPgng,10419
449
+ sky/utils/ux_utils.py,sha256=-fxqsar64eZWZ7vSH6gy1voxsDZTqcTR02a9uf_uRZg,10292
449
450
  sky/utils/validator.py,sha256=AHIYEBpxzpC2Eg8TulruFqQSjTxeynB0Dc7cfP1RX2M,1159
450
451
  sky/utils/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
451
452
  sky/utils/aws/get_default_security_group.py,sha256=LPzz5133ZUMbzDD3iqqACL9PdlgqiQR5hKZIn-D1zhw,228
@@ -480,9 +481,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
480
481
  sky/workspaces/core.py,sha256=MkQoVqWN67tf4VRq284U9vgAw4lwb_cpUfwHQT4V9Ow,16598
481
482
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
482
483
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
483
- skypilot_nightly-1.0.0.dev20250708.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
484
- skypilot_nightly-1.0.0.dev20250708.dist-info/METADATA,sha256=FY6IE86BB5AzLYMUDpwVY_Y_TLxkSmUQ0wwHW3N9v8U,18864
485
- skypilot_nightly-1.0.0.dev20250708.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
486
- skypilot_nightly-1.0.0.dev20250708.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
487
- skypilot_nightly-1.0.0.dev20250708.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
488
- skypilot_nightly-1.0.0.dev20250708.dist-info/RECORD,,
484
+ skypilot_nightly-1.0.0.dev20250710.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
485
+ skypilot_nightly-1.0.0.dev20250710.dist-info/METADATA,sha256=nvk7Ebd5rVL05_GHEahZ3GU-34M064Zmw1YT9_WLsAw,18864
486
+ skypilot_nightly-1.0.0.dev20250710.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
487
+ skypilot_nightly-1.0.0.dev20250710.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
488
+ skypilot_nightly-1.0.0.dev20250710.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
489
+ skypilot_nightly-1.0.0.dev20250710.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8969],{8969:function(e,t,r){r.d(t,{Ce:function(){return u},NJ:function(){return d},UA:function(){return l},getManagedJobs:function(){return i}});var o=r(7294),a=r(5821),n=r(3225),c=r(6378),s=r(7145);async function i(){let{allUsers:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{let t=(await s.x.post("/jobs/queue",{all_users:e})).headers.get("X-Skypilot-Request-ID"),r=await s.x.get("/api/get?request_id=".concat(t));if(500===r.status){try{let e=await r.json();if(e.detail&&e.detail.error)try{let t=JSON.parse(e.detail.error);if(t.type&&t.type===n.iW)return{jobs:[],controllerStopped:!0}}catch(e){console.error("Error parsing JSON:",e)}}catch(e){console.error("Error parsing JSON:",e)}return{jobs:[],controllerStopped:!1}}let o=await r.json();return{jobs:(o.return_value?JSON.parse(o.return_value):[]).map(e=>{let t=[];e.submitted_at&&t.push({time:new Date(1e3*e.submitted_at),event:"Job submitted."}),e.start_at&&t.push({time:new Date(1e3*e.start_at),event:"Job started."}),e.end_at&&("CANCELLING"==e.status||"CANCELLED"==e.status?t.push({time:new Date(1e3*e.end_at),event:"Job cancelled."}):t.push({time:new Date(1e3*e.end_at),event:"Job completed."})),e.last_recovered_at&&e.last_recovered_at!=e.start_at&&t.push({time:new Date(1e3*e.last_recovered_at),event:"Job recovered."});let r=(e.end_at?e.end_at:Date.now()/1e3)-e.submitted_at,o=e.cloud,a=e.cluster_resources;if(!o){if(e.cluster_resources&&"-"!==e.cluster_resources)try{o=e.cluster_resources.split("(")[0].split("x").pop().trim(),a=e.cluster_resources.replace("".concat(o,"("),"(").replace("x ","x")}catch(e){o="Unknown"}else o="Unknown"}let n="",c=n=e.zone?e.zone:e.region;n&&n.length>15&&(n=n.substring(0,15)+"...");let s=o+" ("+n+")";"-"===n&&(s=o);let i=o+" ("+c+")";return"-"===c&&(i=o),{id:e.job_id,task:e.task_name,name:e.job_name,job_duration:e.job_duration,total_duration:r,workspace:e.workspace,status:e.status,requested_resources:e.resources,resources_str:a,resources_str_full:e.cluster_resources_full||a,cloud:o,region:e.region,infra:s,full_infra:i,recoveries:e.recovery_count,details:e.details||e.failure_reason,user:e.user_name,user_hash:e.user_hash,submitted_at:e.submitted_at?new Date(1e3*e.submitted_at):null,events:t,dag_yaml:e.user_yaml,entrypoint:e.entrypoint}}),controllerStopped:!1}}catch(e){return console.error("Error fetching managed job data:",e),{jobs:[],controllerStopped:!1}}}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,[r,a]=(0,o.useState)(null),[n,s]=(0,o.useState)(!0);return(0,o.useEffect)(()=>{(async function(){if(e)try{var t;s(!0);let r=await c.default.get(i,[{allUsers:!0}]),o=null==r?void 0:null===(t=r.jobs)||void 0===t?void 0:t.find(t=>String(t.id)===String(e));o?a({jobs:[o],controllerStopped:r.controllerStopped||!1}):a({jobs:[],controllerStopped:r.controllerStopped||!1})}catch(e){console.error("Error fetching single managed job data:",e),a({jobs:[],controllerStopped:!1})}finally{s(!1)}})()},[e,t]),{jobData:r,loading:n}}async function d(e){let t,{jobId:r,controller:o=!1,signal:c,onNewLog:s}=e,i=Date.now(),l=new Promise(e=>{let r=()=>{let o=Date.now()-i;o>=3e4?e({timeout:!0}):t=setTimeout(r,3e4-o)};t=setTimeout(r,3e4)}),d=window.location.origin,u="".concat(d).concat(n.f4),h=(async()=>{try{let e=(await fetch("".concat(u,"/jobs/logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({controller:o,follow:!1,job_id:r,tail:1e3}),...c?{signal:c}:{}})).body.getReader();try{for(;;){let{done:t,value:r}=await e.read();if(t)break;i=Date.now();let o=new TextDecoder().decode(r);s(o)}}finally{if(!c||!c.aborted)try{e.cancel()}catch(e){"AbortError"!==e.name&&console.warn("Error canceling reader:",e)}t&&clearTimeout(t)}return{timeout:!1}}catch(e){if(t&&clearTimeout(t),"AbortError"===e.name)return{timeout:!1};throw e}})(),b=await Promise.race([h,l]);if(t&&clearTimeout(t),b.timeout){(0,a.C)("Log request for job ".concat(r," timed out after ").concat(30,"s of inactivity"),"warning");return}}async function u(e,t,r){let o="",c="",s="",i={};if("restartcontroller"===e)o="Restarting",c="restarted",s="jobs/queue",i={all_users:!0,refresh:!0},t="controller";else throw Error("Invalid action: ".concat(e));(0,a.C)("".concat(o," job ").concat(t,"..."),"info");let l=window.location.origin,d="".concat(l).concat(n.f4);try{try{let e=(await fetch("".concat(d,"/").concat(s),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})).headers.get("X-Skypilot-Request-ID"),l=await fetch("".concat(d,"/api/get?request_id=").concat(e));if(200===l.status)(0,a.C)("Job ".concat(t," ").concat(c," successfully."),"success");else if(500===l.status)try{let e=await l.json();if(e.detail&&e.detail.error)try{let c=JSON.parse(e.detail.error);c.type&&c.type===n.Bo?(0,a.C)("".concat(o," job ").concat(t," is not supported!"),"error",1e4):c.type&&c.type===n.mF?(0,a.C)("Cluster ".concat(r," does not exist."),"error"):c.type&&c.type===n.iW?(0,a.C)("Cluster ".concat(r," is not up."),"error"):(0,a.C)("".concat(o," job ").concat(t," failed: ").concat(c.type),"error")}catch(r){(0,a.C)("".concat(o," job ").concat(t," failed: ").concat(e.detail.error),"error")}else(0,a.C)("".concat(o," job ").concat(t," failed with no details."),"error")}catch(e){(0,a.C)("".concat(o," job ").concat(t," failed with parse error."),"error")}else(0,a.C)("".concat(o," job ").concat(t," failed with status ").concat(l.status,"."),"error")}catch(e){console.error("Fetch error:",e),(0,a.C)("Network error ".concat(o," job ").concat(t,": ").concat(e.message),"error")}}catch(e){console.error("Error in handleStop:",e),(0,a.C)("Critical error ".concat(o," job ").concat(t,": ").concat(e.message),"error")}}},5821:function(e,t,r){r.d(t,{C:function(){return o}});function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e3,o=document.getElementById("toast-container");o||((o=document.createElement("div")).id="toast-container",o.className="fixed top-0 right-0 p-4 z-[9999] flex flex-col items-end space-y-2",document.body.appendChild(o));let a=document.createElement("div");switch(a.className="rounded-md border-l-4 p-4 shadow-md flex items-center justify-between max-w-md w-full mb-2 pointer-events-auto",t){case"success":a.className+=" bg-green-100 border-green-500 text-green-800";break;case"error":a.className+=" bg-red-100 border-red-500 text-red-800";break;case"warning":a.className+=" bg-yellow-100 border-yellow-500 text-yellow-800";break;default:a.className+=" bg-blue-100 border-blue-500 text-blue-800"}return a.innerHTML='\n <div class="flex-1 mr-2">\n <p class="text-sm font-medium">'.concat(e,'</p>\n </div>\n <button class="text-gray-500 hover:text-gray-700 focus:outline-none" aria-label="Close toast">\n <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <line x1="18" y1="6" x2="6" y2="18"></line>\n <line x1="6" y1="6" x2="18" y2="18"></line>\n </svg>\n </button>\n '),o.appendChild(a),a.querySelector("button").addEventListener("click",()=>{o.removeChild(a)}),setTimeout(()=>{o.contains(a)&&o.removeChild(a)},r),a}},6378:function(e,t,r){r.r(t),r.d(t,{DashboardCache:function(){return a},dashboardCache:function(){return n}});let o=r(1214).ej.DEFAULT_TTL;class a{async get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=r.ttl||o,n=!1!==r.refreshOnAccess,c=this._generateKey(e,t),s=e.name||"anonymous",i=this.cache.get(c),l=Date.now();if(i&&l-i.lastUpdated<a){let r=Math.round((l-i.lastUpdated)/1e3);return this._debug("Cache HIT for ".concat(s," (age: ").concat(r,"s, TTL: ").concat(Math.round(a/1e3),"s)")),n&&(this.cache.set(c,{data:i.data,lastUpdated:l}),this._debug("Cache TTL refreshed for ".concat(s))),this.backgroundJobs.has(c)||this._refreshInBackground(e,t,c),i.data}try{let r=await e(...t);return this.cache.set(c,{data:r,lastUpdated:l}),r}catch(e){if(i)return console.warn("Failed to fetch fresh data for ".concat(c,", returning stale data:"),e),i.data;throw e}}invalidate(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=this._generateKey(e,t);this.cache.delete(r),this.backgroundJobs.delete(r)}invalidateFunction(e){let t=e.name||"anonymous",r=[];for(let e of this.cache.keys())e.startsWith("".concat(t,"_"))&&r.push(e);r.forEach(e=>{this.cache.delete(e),this.backgroundJobs.delete(e)})}clear(){this.cache.clear(),this.backgroundJobs.clear()}getStats(){return{cacheSize:this.cache.size,backgroundJobs:this.backgroundJobs.size,keys:Array.from(this.cache.keys())}}getDetailedStats(){let e=Date.now(),t=[];for(let[r,o]of this.cache.entries()){let a=e-o.lastUpdated;t.push({key:r,age:Math.round(a/1e3),lastUpdated:new Date(o.lastUpdated).toISOString(),hasBackgroundJob:this.backgroundJobs.has(r)})}return{cacheSize:this.cache.size,backgroundJobs:this.backgroundJobs.size,entries:t.sort((e,t)=>e.age-t.age)}}setDebugMode(e){this.debugMode=e}_debug(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];this.debugMode&&console.log("[DashboardCache] ".concat(e),...r)}_refreshInBackground(e,t,r){this.backgroundJobs.set(r,!0),e(...t).then(e=>{this.cache.set(r,{data:e,lastUpdated:Date.now()})}).catch(e=>{console.warn("Background refresh failed for ".concat(r,":"),e)}).finally(()=>{this.backgroundJobs.delete(r)})}_generateKey(e,t){let r=function(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t+e.charCodeAt(r);return t>>>0}(e.toString()),o=t.length>0?JSON.stringify(t):"";return"".concat(r,"_").concat(o)}constructor(){this.cache=new Map,this.backgroundJobs=new Map,this.debugMode=!1}}let n=new a;t.default=n}}]);