skypilot-nightly 1.0.0.dev20250223__py3-none-any.whl → 1.0.0.dev20250225__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.
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 = '2036622dd0874016a2c8a374326bbf5e0aea93ec'
8
+ _SKYPILOT_COMMIT_SHA = '546c0864e0f1e32e3d1080d9b7a5fdf293bc1ad9'
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.dev20250223'
38
+ __version__ = '1.0.0.dev20250225'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
sky/adaptors/nebius.py CHANGED
@@ -5,8 +5,10 @@ from sky.adaptors import common
5
5
 
6
6
  NEBIUS_TENANT_ID_FILENAME = 'NEBIUS_TENANT_ID.txt'
7
7
  NEBIUS_IAM_TOKEN_FILENAME = 'NEBIUS_IAM_TOKEN.txt'
8
+ NEBIUS_PROJECT_ID_FILENAME = 'NEBIUS_PROJECT_ID.txt'
8
9
  NEBIUS_TENANT_ID_PATH = '~/.nebius/' + NEBIUS_TENANT_ID_FILENAME
9
10
  NEBIUS_IAM_TOKEN_PATH = '~/.nebius/' + NEBIUS_IAM_TOKEN_FILENAME
11
+ NEBIUS_PROJECT_ID_PATH = '~/.nebius/' + NEBIUS_PROJECT_ID_FILENAME
10
12
 
11
13
  MAX_RETRIES_TO_DISK_CREATE = 120
12
14
  MAX_RETRIES_TO_INSTANCE_STOP = 120
@@ -20,6 +22,7 @@ POLL_INTERVAL = 5
20
22
 
21
23
  _iam_token = None
22
24
  _tenant_id = None
25
+ _project_id = None
23
26
 
24
27
  nebius = common.LazyImport(
25
28
  'nebius',
@@ -69,6 +72,18 @@ def get_iam_token():
69
72
  return _iam_token
70
73
 
71
74
 
75
+ def get_project_id():
76
+ global _project_id
77
+ if _project_id is None:
78
+ try:
79
+ with open(os.path.expanduser(NEBIUS_PROJECT_ID_PATH),
80
+ encoding='utf-8') as file:
81
+ _project_id = file.read().strip()
82
+ except FileNotFoundError:
83
+ return None
84
+ return _project_id
85
+
86
+
72
87
  def get_tenant_id():
73
88
  global _tenant_id
74
89
  if _tenant_id is None:
sky/cli.py CHANGED
@@ -4585,6 +4585,7 @@ def serve_status(verbose: bool, endpoint: bool, service_names: List[str]):
4585
4585
  type=int,
4586
4586
  help='Tear down a given replica')
4587
4587
  @_add_click_options(_COMMON_OPTIONS)
4588
+ @usage_lib.entrypoint
4588
4589
  # pylint: disable=redefined-builtin
4589
4590
  def serve_down(
4590
4591
  service_names: List[str],
sky/client/cli.py CHANGED
@@ -4585,6 +4585,7 @@ def serve_status(verbose: bool, endpoint: bool, service_names: List[str]):
4585
4585
  type=int,
4586
4586
  help='Tear down a given replica')
4587
4587
  @_add_click_options(_COMMON_OPTIONS)
4588
+ @usage_lib.entrypoint
4588
4589
  # pylint: disable=redefined-builtin
4589
4590
  def serve_down(
4590
4591
  service_names: List[str],
sky/clouds/nebius.py CHANGED
@@ -15,7 +15,8 @@ if typing.TYPE_CHECKING:
15
15
  _CREDENTIAL_FILES = [
16
16
  # credential files for Nebius
17
17
  nebius.NEBIUS_TENANT_ID_FILENAME,
18
- nebius.NEBIUS_IAM_TOKEN_FILENAME
18
+ nebius.NEBIUS_IAM_TOKEN_FILENAME,
19
+ nebius.NEBIUS_PROJECT_ID_FILENAME,
19
20
  ]
20
21
 
21
22
 
@@ -255,6 +256,8 @@ class Nebius(clouds.Cloud):
255
256
  token_msg = (' Credentials can be set up by running: \n'\
256
257
  f' $ nebius iam get-access-token > {nebius.NEBIUS_IAM_TOKEN_PATH} \n') # pylint: disable=line-too-long
257
258
  tenant_msg = (' Copy your tenat ID from the web console and save it to file \n' # pylint: disable=line-too-long
259
+ f' $ echo $NEBIUS_TENANT_ID_PATH > {nebius.NEBIUS_TENANT_ID_PATH} \n' # pylint: disable=line-too-long
260
+ ' Or if you have 1 tenant you can run:\n' # pylint: disable=line-too-long
258
261
  f' $ nebius --format json iam whoami|jq -r \'.user_profile.tenants[0].tenant_id\' > {nebius.NEBIUS_TENANT_ID_PATH} \n') # pylint: disable=line-too-long
259
262
  if token is None:
260
263
  return False, f'{token_msg}'
sky/global_user_state.py CHANGED
@@ -60,7 +60,7 @@ def create_table(cursor, conn):
60
60
  last_use TEXT,
61
61
  status TEXT,
62
62
  autostop INTEGER DEFAULT -1,
63
- metadata TEXT DEFAULT "{}",
63
+ metadata TEXT DEFAULT '{}',
64
64
  to_down INTEGER DEFAULT 0,
65
65
  owner TEXT DEFAULT null,
66
66
  cluster_hash TEXT DEFAULT null,
@@ -118,7 +118,7 @@ def create_table(cursor, conn):
118
118
  'INTEGER DEFAULT -1')
119
119
 
120
120
  db_utils.add_column_to_table(cursor, conn, 'clusters', 'metadata',
121
- 'TEXT DEFAULT "{}"')
121
+ 'TEXT DEFAULT \'{}\'')
122
122
 
123
123
  db_utils.add_column_to_table(cursor, conn, 'clusters', 'to_down',
124
124
  'INTEGER DEFAULT 0')
@@ -271,7 +271,7 @@ def add_or_update_cluster(cluster_name: str,
271
271
  # Keep the old metadata value if it exists, otherwise set it to
272
272
  # default {}.
273
273
  'COALESCE('
274
- '(SELECT metadata FROM clusters WHERE name=?), "{}"),'
274
+ '(SELECT metadata FROM clusters WHERE name=?), \'{}\'),'
275
275
  # Keep the old owner value if it exists, otherwise set it to
276
276
  # default null.
277
277
  'COALESCE('
sky/jobs/server/server.py CHANGED
@@ -115,7 +115,8 @@ async def dashboard(request: fastapi.Request,
115
115
  # Find the port for the dashboard of the user
116
116
  os.environ[constants.USER_ID_ENV_VAR] = user_hash
117
117
  server_common.reload_for_new_request(client_entrypoint=None,
118
- client_command=None)
118
+ client_command=None,
119
+ using_remote_api_server=False)
119
120
  logger.info(f'Starting dashboard for user hash: {user_hash}')
120
121
 
121
122
  with dashboard_utils.get_dashboard_lock_for_user(user_hash):
sky/jobs/state.py CHANGED
@@ -212,6 +212,7 @@ class ManagedJobStatus(enum.Enum):
212
212
  is dedicated to a managed job, i.e. there should always be enough resource
213
213
  to run the job and the job will be immediately transitioned to RUNNING.
214
214
 
215
+ You can see a state diagram for ManagedJobStatus in sky/jobs/README.md.
215
216
  """
216
217
  # PENDING: Waiting for the jobs controller to have a slot to run the
217
218
  # controller process.
@@ -332,6 +333,8 @@ class ManagedJobScheduleState(enum.Enum):
332
333
  to transition directly from WAITING or even INACTIVE to DONE if the job is
333
334
  cancelled.
334
335
 
336
+ You can see a state diagram in sky/jobs/README.md.
337
+
335
338
  There is no well-defined mapping from the managed job status to schedule
336
339
  state or vice versa. (In fact, schedule state is defined on the job and
337
340
  status on the task.)
@@ -44,13 +44,21 @@ def get_project_by_region(region: str) -> str:
44
44
  # Project id looks like project-e00xxxxxxxxxxxxxx where
45
45
  # e00 - id of region 'eu-north1'
46
46
  # e01 - id of region 'eu-west1'
47
+ region_ids = {'eu-north1': 'e00', 'eu-west1': 'e01'}
47
48
  # TODO(SalikovAlex): fix when info about region will be in projects list
48
49
  # Currently, Nebius cloud supports 2 regions. We manually enumerate
49
50
  # them here. Reference: https://docs.nebius.com/overview/regions
51
+
52
+ # 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.')
50
60
  for project in projects.items:
51
- if region == 'eu-north1' and project.metadata.id[8:11] == 'e00':
52
- return project.metadata.id
53
- if region == 'eu-west1' and project.metadata.id[8:11] == 'e01':
61
+ if project.metadata.id[8:11] == region_ids[region]:
54
62
  return project.metadata.id
55
63
  raise Exception(f'No project found for region "{region}".')
56
64
 
sky/server/common.py CHANGED
@@ -400,20 +400,25 @@ def request_body_to_params(body: pydantic.BaseModel) -> Dict[str, Any]:
400
400
 
401
401
 
402
402
  def reload_for_new_request(client_entrypoint: Optional[str],
403
- client_command: Optional[str]):
403
+ client_command: Optional[str],
404
+ using_remote_api_server: bool):
404
405
  """Reload modules, global variables, and usage message for a new request."""
405
406
  # Reset the client entrypoint and command for the usage message.
406
- common_utils.set_client_entrypoint_and_command(
407
+ common_utils.set_client_status(
407
408
  client_entrypoint=client_entrypoint,
408
409
  client_command=client_command,
410
+ using_remote_api_server=using_remote_api_server,
409
411
  )
410
- # We need to reset usage message, so that the message is up-to-date with the
411
- # latest information in the context, e.g. client entrypoint and run id.
412
- usage_lib.messages.reset(usage_lib.MessageType.USAGE)
413
412
 
413
+ # Clear cache should be called before reload_logger and usage reset,
414
+ # otherwise, the latest env var will not be used.
414
415
  for func in annotations.FUNCTIONS_NEED_RELOAD_CACHE:
415
416
  func.cache_clear()
416
417
 
418
+ # We need to reset usage message, so that the message is up-to-date with the
419
+ # latest information in the context, e.g. client entrypoint and run id.
420
+ usage_lib.messages.reset(usage_lib.MessageType.USAGE)
421
+
417
422
  # Make sure the logger takes the new environment variables. This is
418
423
  # necessary because the logger is initialized before the environment
419
424
  # variables are set, such as SKYPILOT_DEBUG.
@@ -178,7 +178,8 @@ def override_request_env_and_config(
178
178
  os.environ['CLICOLOR_FORCE'] = '1'
179
179
  server_common.reload_for_new_request(
180
180
  client_entrypoint=request_body.entrypoint,
181
- client_command=request_body.entrypoint_command)
181
+ client_command=request_body.entrypoint_command,
182
+ using_remote_api_server=request_body.using_remote_api_server)
182
183
  try:
183
184
  with skypilot_config.override_skypilot_config(
184
185
  request_body.override_skypilot_config):
@@ -255,6 +256,7 @@ def _request_execution_wrapper(request_id: str,
255
256
  try:
256
257
  with override_request_env_and_config(request_body):
257
258
  return_value = func(**request_body.to_kwargs())
259
+ f.flush()
258
260
  except KeyboardInterrupt:
259
261
  logger.info(f'Request {request_id} cancelled by user')
260
262
  _restore_output(original_stdout, original_stderr)
@@ -37,7 +37,7 @@ def request_body_env_vars() -> dict:
37
37
  env_vars[constants.USER_ENV_VAR] = os.getenv(constants.USER_ENV_VAR,
38
38
  getpass.getuser())
39
39
  env_vars[
40
- usage_constants.USAGE_RUN_ID_ENV_VAR] = common_utils.get_usage_run_id()
40
+ usage_constants.USAGE_RUN_ID_ENV_VAR] = usage_lib.messages.usage.run_id
41
41
  # Remove the path to config file, as the config content is included in the
42
42
  # request body and will be merged with the config on the server side.
43
43
  env_vars.pop(skypilot_config.ENV_VAR_SKYPILOT_CONFIG, None)
@@ -70,6 +70,7 @@ class RequestBody(pydantic.BaseModel):
70
70
  env_vars: Dict[str, str] = {}
71
71
  entrypoint: str = ''
72
72
  entrypoint_command: str = ''
73
+ using_remote_api_server: bool = False
73
74
  override_skypilot_config: Optional[Dict[str, Any]] = {}
74
75
 
75
76
  def __init__(self, **data):
@@ -80,6 +81,8 @@ class RequestBody(pydantic.BaseModel):
80
81
  data['entrypoint'] = data.get('entrypoint', usage_lib_entrypoint)
81
82
  data['entrypoint_command'] = data.get(
82
83
  'entrypoint_command', common_utils.get_pretty_entrypoint_cmd())
84
+ data['using_remote_api_server'] = data.get(
85
+ 'using_remote_api_server', not common.is_api_server_local())
83
86
  data['override_skypilot_config'] = data.get(
84
87
  'override_skypilot_config',
85
88
  get_override_skypilot_config_from_client())
@@ -95,6 +98,7 @@ class RequestBody(pydantic.BaseModel):
95
98
  kwargs.pop('env_vars')
96
99
  kwargs.pop('entrypoint')
97
100
  kwargs.pop('entrypoint_command')
101
+ kwargs.pop('using_remote_api_server')
98
102
  kwargs.pop('override_skypilot_config')
99
103
  return kwargs
100
104
 
sky/server/server.py CHANGED
@@ -41,6 +41,7 @@ from sky.server.requests import executor
41
41
  from sky.server.requests import payloads
42
42
  from sky.server.requests import requests as requests_lib
43
43
  from sky.skylet import constants
44
+ from sky.usage import usage_lib
44
45
  from sky.utils import common as common_lib
45
46
  from sky.utils import common_utils
46
47
  from sky.utils import dag_utils
@@ -1076,6 +1077,10 @@ if __name__ == '__main__':
1076
1077
  parser.add_argument('--port', default=46580, type=int)
1077
1078
  parser.add_argument('--deploy', action='store_true')
1078
1079
  cmd_args = parser.parse_args()
1080
+ # Show the privacy policy if it is not already shown. We place it here so
1081
+ # that it is shown only when the API server is started.
1082
+ usage_lib.maybe_show_privacy_policy()
1083
+
1079
1084
  num_workers = None
1080
1085
  if cmd_args.deploy:
1081
1086
  num_workers = os.cpu_count()
sky/usage/usage_lib.py CHANGED
@@ -10,8 +10,6 @@ import traceback
10
10
  import typing
11
11
  from typing import Any, Callable, Dict, List, Optional, Union
12
12
 
13
- import click
14
-
15
13
  import sky
16
14
  from sky import sky_logging
17
15
  from sky.adaptors import common as adaptors_common
@@ -167,6 +165,10 @@ class UsageMessageToReport(MessageToReport):
167
165
  self.exception: Optional[str] = None # entrypoint_context
168
166
  self.stacktrace: Optional[str] = None # entrypoint_context
169
167
 
168
+ # Whether API server is deployed remotely.
169
+ self.using_remote_api_server: bool = (
170
+ common_utils.get_using_remote_api_server())
171
+
170
172
  def update_entrypoint(self, msg: str):
171
173
  if self.client_entrypoint is None:
172
174
  self.client_entrypoint = common_utils.get_current_client_entrypoint(
@@ -215,9 +217,11 @@ class UsageMessageToReport(MessageToReport):
215
217
  def update_ray_yaml(self, yaml_config_or_path: Union[Dict, str]):
216
218
  if self.ray_yamls is None:
217
219
  self.ray_yamls = []
218
- self.ray_yamls.extend(
219
- prepare_json_from_yaml_config(yaml_config_or_path))
220
- self.num_tried_regions = len(self.ray_yamls)
220
+ if self.num_tried_regions is None:
221
+ self.num_tried_regions = 0
222
+ # Only keep the latest ray yaml to reduce the size of the message.
223
+ self.ray_yamls = prepare_json_from_yaml_config(yaml_config_or_path)
224
+ self.num_tried_regions += 1
221
225
 
222
226
  def update_cluster_name(self, cluster_name: Union[List[str], str]):
223
227
  if isinstance(cluster_name, str):
@@ -465,6 +469,20 @@ def send_heartbeat(interval_seconds: int = 600):
465
469
  _send_to_loki(MessageType.HEARTBEAT)
466
470
 
467
471
 
472
+ def maybe_show_privacy_policy():
473
+ """Show the privacy policy if it is not already shown."""
474
+ # Show the policy message only when the entrypoint is used.
475
+ # An indicator for PRIVACY_POLICY has already been shown.
476
+ privacy_policy_indicator = os.path.expanduser(constants.PRIVACY_POLICY_PATH)
477
+ if not env_options.Options.DISABLE_LOGGING.get():
478
+ os.makedirs(os.path.dirname(privacy_policy_indicator), exist_ok=True)
479
+ try:
480
+ with open(privacy_policy_indicator, 'x', encoding='utf-8'):
481
+ logger.info(constants.USAGE_POLICY_MESSAGE)
482
+ except FileExistsError:
483
+ pass
484
+
485
+
468
486
  @contextlib.contextmanager
469
487
  def entrypoint_context(name: str, fallback: bool = False):
470
488
  """Context manager for entrypoint.
@@ -476,17 +494,6 @@ def entrypoint_context(name: str, fallback: bool = False):
476
494
  additional entrypoint_context with fallback=True can be used to wrap
477
495
  the global entrypoint to catch any exceptions that are not caught.
478
496
  """
479
- # Show the policy message only when the entrypoint is used.
480
- # An indicator for PRIVACY_POLICY has already been shown.
481
- privacy_policy_indicator = os.path.expanduser(constants.PRIVACY_POLICY_PATH)
482
- if not env_options.Options.DISABLE_LOGGING.get():
483
- os.makedirs(os.path.dirname(privacy_policy_indicator), exist_ok=True)
484
- try:
485
- with open(privacy_policy_indicator, 'x', encoding='utf-8'):
486
- click.secho(constants.USAGE_POLICY_MESSAGE, fg='yellow')
487
- except FileExistsError:
488
- pass
489
-
490
497
  is_entry = messages.usage.entrypoint is None
491
498
  if is_entry and not fallback:
492
499
  for message in messages.values():
sky/utils/common_utils.py CHANGED
@@ -247,18 +247,23 @@ class Backoff:
247
247
 
248
248
  _current_command: Optional[str] = None
249
249
  _current_client_entrypoint: Optional[str] = None
250
+ _using_remote_api_server: Optional[bool] = None
250
251
 
251
252
 
252
- def set_client_entrypoint_and_command(client_entrypoint: Optional[str],
253
- client_command: Optional[str]):
253
+ def set_client_status(client_entrypoint: Optional[str],
254
+ client_command: Optional[str],
255
+ using_remote_api_server: bool):
254
256
  """Override the current client entrypoint and command.
255
257
 
256
258
  This is useful when we are on the SkyPilot API server side and we have a
257
259
  client entrypoint and command from the client.
258
260
  """
259
- global _current_command, _current_client_entrypoint
261
+ global _current_command
262
+ global _current_client_entrypoint
263
+ global _using_remote_api_server
260
264
  _current_command = client_command
261
265
  _current_client_entrypoint = client_entrypoint
266
+ _using_remote_api_server = using_remote_api_server
262
267
 
263
268
 
264
269
  def get_current_command() -> str:
@@ -284,6 +289,17 @@ def get_current_client_entrypoint(server_entrypoint: str) -> str:
284
289
  return server_entrypoint
285
290
 
286
291
 
292
+ def get_using_remote_api_server() -> bool:
293
+ """Returns whether the API server is remote."""
294
+ if _using_remote_api_server is not None:
295
+ return _using_remote_api_server
296
+ # This gets the right status for the local client.
297
+ # TODO(zhwu): This is to prevent circular import. We should refactor this.
298
+ # pylint: disable=import-outside-toplevel
299
+ from sky.server import common as server_common
300
+ return not server_common.is_api_server_local()
301
+
302
+
287
303
  def get_pretty_entrypoint_cmd() -> str:
288
304
  """Returns the prettified entry point of this process (sys.argv).
289
305
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250223
3
+ Version: 1.0.0.dev20250225
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,14 +1,14 @@
1
- sky/__init__.py,sha256=Hu_vDGy1SU1rmPpIrAdhs4dqKg0vZvdbTKqe0-DjmC4,6428
1
+ sky/__init__.py,sha256=KSl1VCjCC3uU-BihR5aIRst73gWU1IOO1xhIx-4pmso,6428
2
2
  sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
3
3
  sky/authentication.py,sha256=hCEqi77nprQEg3ktfRL51xiiw16zwZOmFEDB_Z7fWVU,22384
4
4
  sky/check.py,sha256=NDKx_Zm7YRxPjMv82wz3ESLnGIPljaACyqVdVNM0PzY,11258
5
- sky/cli.py,sha256=wB9TA4RKuJMHz9hkXlX8QNh8Gm5EiBmTYYaR7wWnYF0,218213
5
+ sky/cli.py,sha256=wTej1bo7hZ-qWfjd1Fn392dLU53Jph7cl0ZnCKD_Nio,218235
6
6
  sky/cloud_stores.py,sha256=-95XIqi_ouo7hvoN5mQNP6bGm07MyF6Yk-YP4Txb5wg,24034
7
7
  sky/core.py,sha256=X83hdpPTiWyEJLamrguCd03PUjkRiGgqTFfEBEQkzWc,45471
8
8
  sky/dag.py,sha256=Yl7Ry26Vql5cv4YMz8g9kOUgtoCihJnw7c8NgZYakMY,3242
9
9
  sky/exceptions.py,sha256=cGepNlBkjjgvi3fazc3DbdYLKhhF_sHCuGX0-hu_QMQ,13685
10
10
  sky/execution.py,sha256=0M4RTEzWn-B9oz221XdZOIGH12XOACmNq0j-WGUT_No,28023
11
- sky/global_user_state.py,sha256=PlAhEkBQ9MNAaZs96R8BouhWk9iVghm6CNKSxjsyAAY,33242
11
+ sky/global_user_state.py,sha256=sUDdSsJeiJkbgmZNwy8YGFK0XeNh-RBr1VDUvbmjf0g,33246
12
12
  sky/models.py,sha256=4xSW05BdDPEjW8Ubvj3VlVOVnzv0TbrolsFvR5R5v1U,638
13
13
  sky/optimizer.py,sha256=C82l9N3umdrJ2AaM-pSg0aK5rpOAX3lEAfFU7r6hqPo,60183
14
14
  sky/resources.py,sha256=f2Qo_Wt0kFruKmYm6cgYbICH_wn0Zkb8uIv6LA82SRs,72153
@@ -26,7 +26,7 @@ sky/adaptors/docker.py,sha256=_kzpZ0fkWHqqQAVVl0llTsCE31KYz3Sjn8psTBQHVkA,468
26
26
  sky/adaptors/gcp.py,sha256=OQ9RaqjR0r0iaWYpjvEtIx5vnEhyB4LhUCwbtdxsmVk,3115
27
27
  sky/adaptors/ibm.py,sha256=H87vD6izq_wQI8oQC7cx9iVtRgPi_QkAcrfa1Z3PNqU,4906
28
28
  sky/adaptors/kubernetes.py,sha256=fvNeqqyW4WbUDT-isU_fWLN-zqywayyRkVsj7sJ4Vc8,6645
29
- sky/adaptors/nebius.py,sha256=bZR7ybfqIyUbNFiMfwC7qpOmSWDM9uExxWhm-MT_PqU,2259
29
+ sky/adaptors/nebius.py,sha256=JOvwniQT-Pkp9-af6IdL_FUkjIbsEAUXVNUkwdaEeb0,2732
30
30
  sky/adaptors/oci.py,sha256=LfMSFUmkkNT6Yoz9FZHNl6UFSg4X1lJO4-x4ZbDdXTs,2831
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=o4RymqSceq5mLEZL0upQM6NVEzJJQzj9s9tTm49uUTc,26365
45
45
  sky/client/__init__.py,sha256=pz6xvVSd9X-gwqbsDL0E9QOojYqM0KAD0j-NCyCIF1k,38
46
- sky/client/cli.py,sha256=wB9TA4RKuJMHz9hkXlX8QNh8Gm5EiBmTYYaR7wWnYF0,218213
46
+ sky/client/cli.py,sha256=wTej1bo7hZ-qWfjd1Fn392dLU53Jph7cl0ZnCKD_Nio,218235
47
47
  sky/client/common.py,sha256=axDic7WOG1e78SdFm5XIwdhX7YNvf3g4k7INrsW3X4s,14611
48
48
  sky/client/sdk.py,sha256=U4v8Khu1lf1oUoBuJUhIFnjsFhYM9x8XcKsnVRMtihI,66990
49
49
  sky/clouds/__init__.py,sha256=OW6mJ-9hpJSBORCgt2LippLQEYZHNfnBW1mooRNNvxo,1416
@@ -57,7 +57,7 @@ sky/clouds/gcp.py,sha256=0QpsI0Dso1xs3LhGlUq-Sq6WK-u11wN-57-vfcyhI5I,55154
57
57
  sky/clouds/ibm.py,sha256=R4JR96YfXstZ2B_IgFNVEX2SBAq3q0lSWz4y7FoFoeE,21474
58
58
  sky/clouds/kubernetes.py,sha256=7ki_zJZKnkhOPrHgVFq6azy5UhNKeeBOCSTjKCgj3vk,31709
59
59
  sky/clouds/lambda_cloud.py,sha256=ejqA_Wj5-325Y_QjQ__FY4HMO8sv_2tSRsufmaldcmI,12699
60
- sky/clouds/nebius.py,sha256=Z439DIaLCOqpCDBq8QhgiFyn5vIaZ7Rj7O6yZ1rjQ5g,12289
60
+ sky/clouds/nebius.py,sha256=4180IruRMib7L9o60lrxrUDJtYhpX4lWFfAznbZoY6Q,12560
61
61
  sky/clouds/oci.py,sha256=irINbQsQ6YxRxGTMaCNsms3mZkIun2oJMMA1fMCRJyA,27072
62
62
  sky/clouds/paperspace.py,sha256=O7bH8YaHBLFuyj6rDz2bPDz_6OYWmNB9OLqnZH70yfY,10922
63
63
  sky/clouds/runpod.py,sha256=hzYB4td6qaged83xMAVKZ96bH40oZnrHXL7a_CKxXIw,11926
@@ -111,7 +111,7 @@ sky/jobs/constants.py,sha256=HrQbQA41Khor89ZoH112kjHRgehge-k4o0R9T9UbbaM,3088
111
111
  sky/jobs/controller.py,sha256=4G1CKI7M7D1BgJLbJMeqzg0iDDv7FR4ObB1BKZFFjhk,29585
112
112
  sky/jobs/recovery_strategy.py,sha256=RLrqq8B1likxTknPzt3_BqO26sFVpoatxzUuGfwc18A,26170
113
113
  sky/jobs/scheduler.py,sha256=IUW0a_69Pkvs4jqsWCXkeMDIZn-TTuPNyZvPLGRUYUM,12306
114
- sky/jobs/state.py,sha256=y9X1JGWpCokWBIwHZGB55fx39ZsilB1NZTbN_U8mPjA,43528
114
+ sky/jobs/state.py,sha256=dIONpSuo5oolbCH1j7IWPlK97s5-NSl3whxH5Gn5DYI,43660
115
115
  sky/jobs/utils.py,sha256=SEeoXDWM-n2kg-eLd39kLWXbK7cavMst9s3xFVqaJg4,52580
116
116
  sky/jobs/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  sky/jobs/client/sdk.py,sha256=mblI0hRH1It-I1hfs2_TdQTh_mtixcYJEZCWyKbqaaE,9707
@@ -121,7 +121,7 @@ sky/jobs/dashboard/templates/index.html,sha256=tz95q8O2pF7IvfY6yv0rnPyhj4DX8WX4R
121
121
  sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
122
122
  sky/jobs/server/core.py,sha256=r9wrwVHrmuqgYAMoEEp4UfCLw8eYaD2RHGIBViHy9cc,23985
123
123
  sky/jobs/server/dashboard_utils.py,sha256=2Mbx40W1pQqPEPHsSDbHeaF0j5cgyKy-_A9Owdwp_AQ,2315
124
- sky/jobs/server/server.py,sha256=s3wULAh4u4drdIz2VA8l0HiXxHWdUzsBDYCstzU0Vxs,7411
124
+ sky/jobs/server/server.py,sha256=XvAwFE6pROoffrC3RZ8IwYoMDguCoGurNVqjncFRJTU,7483
125
125
  sky/provision/__init__.py,sha256=LzOo5LjkRXwSf29dUqN14YbjzQu3liXLQcmweTeZ4dE,6457
126
126
  sky/provision/common.py,sha256=E8AlSUFcn0FYQq1erNmoVfMAdsF9tP2yxfyk-9PLvQU,10286
127
127
  sky/provision/constants.py,sha256=oc_XDUkcoLQ_lwDy5yMeMSWviKS0j0s1c0pjlvpNeWY,800
@@ -175,7 +175,7 @@ sky/provision/lambda_cloud/lambda_utils.py,sha256=H2Qx4xdJyyEu2IXaj5AyppuPJW385n
175
175
  sky/provision/nebius/__init__.py,sha256=30I3181mu0W5g9fNvaWMPoBJZoGZ9RibuTpBH9P2pDg,558
176
176
  sky/provision/nebius/config.py,sha256=LK9kTDp2w6zZrn3vNdcSGgsgS-dL_j63Nh4_u3pqNiA,321
177
177
  sky/provision/nebius/instance.py,sha256=kfpZqwh56XV7h6XsX5dGJYilsVdRhC1EUgk0flaCo_E,11889
178
- sky/provision/nebius/utils.py,sha256=BxA7Hh6P7dKcXSw4tx2dyYd1txm-c7Psym3rRCAGLic,12785
178
+ sky/provision/nebius/utils.py,sha256=o1Jr_pzH-2uk34obt9pSGXf2i2tljOo-uhXcryfFUxs,13145
179
179
  sky/provision/oci/__init__.py,sha256=5E6EUtTK3mqGVREw5TuVl5DxteBYTZigIii7c8gHExU,612
180
180
  sky/provision/oci/config.py,sha256=diSDTyHLokcuXGB2XgZCHFvsXa8bah1PP2XuMouW_UU,1650
181
181
  sky/provision/oci/instance.py,sha256=rVGee5y0qkoeLIP5vPDmLq1N8G1n8mru62VHb0Bv5iY,16784
@@ -228,14 +228,14 @@ sky/serve/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
228
228
  sky/serve/server/core.py,sha256=pRvFadEIH_WTUkTtSmuFoPBP4JFq8Obt68ifi9DWuog,36865
229
229
  sky/serve/server/server.py,sha256=gQGVU9nHYdGbaLhGjIUNIYn4xwKjRASRJkiiTL5AI1Y,3283
230
230
  sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
231
- sky/server/common.py,sha256=aCLz5LcSmNO0xISAGhtGs-YF2qzIwgIYKgDlIf6DFyU,17333
231
+ sky/server/common.py,sha256=0LphKrp89_sGI-xDakK2uEqI-zKuvbc4OTcuLCiKfmQ,17560
232
232
  sky/server/constants.py,sha256=SqhWJMassFyvWAJn2UJHvuA_0_C6f5vngMzZ2KYLsKw,770
233
- sky/server/server.py,sha256=0gcIn3jr_4DkHpBJYdNq--uPo9Im8bn2ftxgd8mBMcU,42225
233
+ sky/server/server.py,sha256=4ipJG67sBFWylNYdPD1FUhth36yX23XbcROXipRSZsw,42438
234
234
  sky/server/stream_utils.py,sha256=-3IX1YCgxAFfcvQIV0TCvOn1wbRLWovAx3ckCrsExWU,5651
235
235
  sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
236
236
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
- sky/server/requests/executor.py,sha256=NxVB0aFA05GddXDdt89wEwEYyJcIIrsQxE2wowklhUI,19597
238
- sky/server/requests/payloads.py,sha256=PeEkqQoTO3ellelkFX5yzPKbPkDV-NfVXkxHndYlrjE,15769
237
+ sky/server/requests/executor.py,sha256=TWX2jYkkstgRyRkWNE19Mgw4_CfzadebOW30iTGdK_Q,19693
238
+ sky/server/requests/payloads.py,sha256=YfZyHI1vYil1m_nT6GwrhAfslheBOjECyPFkmXsZ7pU,15982
239
239
  sky/server/requests/requests.py,sha256=aMdjiK5kjSYP36pxdXFU6qgKOXcOmtViHbFm3V8Dvf8,19590
240
240
  sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
241
  sky/server/requests/queues/mp_queue.py,sha256=_7AFas__0b1L8e7Bwy4lu0VYU18R85YwMlDHPhQCfh0,2998
@@ -301,7 +301,7 @@ sky/templates/vsphere-ray.yml.j2,sha256=NWU3kksvESEh5OxeWsoJ0r4jvskQyassfiBatj0q
301
301
  sky/templates/websocket_proxy.py,sha256=vm8mnwSOZC2pGdeCNn3WGX7u16xenDv08xTcUAR3CNc,2138
302
302
  sky/usage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
303
303
  sky/usage/constants.py,sha256=mFrTgrFIfFf4kpcl-M1VDU7_moD5_mJazUJTUDrybms,1102
304
- sky/usage/usage_lib.py,sha256=F3S7eu4UYg9OjdG14l-yBUAl3fnwwC9vvjgE1s8BKXY,21055
304
+ sky/usage/usage_lib.py,sha256=rInJW2kj2O1wwXUZAbeVVLhnoa7T_xBHqDhbBBrUqfI,21400
305
305
  sky/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
306
306
  sky/utils/accelerator_registry.py,sha256=GjOgqT0s0n5hT-wcpCcTRu74rnKb8LwQ6MJl6dKL-1I,3905
307
307
  sky/utils/admin_policy_utils.py,sha256=y_do0VH6qh163EqSuRW1uGeKvTnJhiYNrHUs77uoOcA,6013
@@ -310,7 +310,7 @@ sky/utils/cluster_utils.py,sha256=s6DFRXktv6_gF_DnwDEXJ7CniifHp8CAPeGciRCbXgI,14
310
310
  sky/utils/command_runner.py,sha256=-7vxLvwZnTvYMQ_nScmuQWY6ZvQYv69yvvIp2uOaOqU,39063
311
311
  sky/utils/command_runner.pyi,sha256=mJOzCgcYZAfHwnY_6Wf1YwlTEJGb9ihzc2f0rE0Kw98,7751
312
312
  sky/utils/common.py,sha256=P4oVXFATUYgkruHX92cN12SJBtfb8DiOOYZtbN1kvP0,1927
313
- sky/utils/common_utils.py,sha256=-O0GthIockeJy8LlA4heVYYtaUdQwNA-5mFMqHajRf8,27457
313
+ sky/utils/common_utils.py,sha256=SChX042UH_Beoq0SJiyw0kRpCA0faycPRaqXEF2GNZ4,28091
314
314
  sky/utils/config_utils.py,sha256=VQ2E3DQ2XysD-kul-diSrxn_pXWsDMfKAev91OiJQ1Q,9041
315
315
  sky/utils/control_master_utils.py,sha256=iD4M0onjYOdZ2RuxjwMBl4KhafHXJzuHjvqlBUnu-VE,1450
316
316
  sky/utils/controller_utils.py,sha256=Wth_esy2NX9nco-MK01bgQMIChAYky0Uq4T35jQkXxY,48472
@@ -344,9 +344,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488
344
344
  sky/utils/kubernetes/kubernetes_deploy_utils.py,sha256=iAjfyPclOs8qlALACcfxLpRAO9CZ-h16leFqXZ6tNaY,10096
345
345
  sky/utils/kubernetes/rsync_helper.sh,sha256=h4YwrPFf9727CACnMJvF3EyK_0OeOYKKt4su_daKekw,1256
346
346
  sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
347
- skypilot_nightly-1.0.0.dev20250223.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
348
- skypilot_nightly-1.0.0.dev20250223.dist-info/METADATA,sha256=U8WMutzRSXP2hdMb3lBOsh3TsuFQGb4UDLNx5GgyAwM,19055
349
- skypilot_nightly-1.0.0.dev20250223.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
350
- skypilot_nightly-1.0.0.dev20250223.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
351
- skypilot_nightly-1.0.0.dev20250223.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
352
- skypilot_nightly-1.0.0.dev20250223.dist-info/RECORD,,
347
+ skypilot_nightly-1.0.0.dev20250225.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
348
+ skypilot_nightly-1.0.0.dev20250225.dist-info/METADATA,sha256=n0NjxuYEKzBIVHBricBiNx4ILxluNGwheNot34KQd2M,19055
349
+ skypilot_nightly-1.0.0.dev20250225.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
350
+ skypilot_nightly-1.0.0.dev20250225.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
351
+ skypilot_nightly-1.0.0.dev20250225.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
352
+ skypilot_nightly-1.0.0.dev20250225.dist-info/RECORD,,