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 +2 -2
- sky/adaptors/nebius.py +15 -0
- sky/cli.py +1 -0
- sky/client/cli.py +1 -0
- sky/clouds/nebius.py +4 -1
- sky/global_user_state.py +3 -3
- sky/jobs/server/server.py +2 -1
- sky/jobs/state.py +3 -0
- sky/provision/nebius/utils.py +11 -3
- sky/server/common.py +10 -5
- sky/server/requests/executor.py +3 -1
- sky/server/requests/payloads.py +5 -1
- sky/server/server.py +5 -0
- sky/usage/usage_lib.py +23 -16
- sky/utils/common_utils.py +19 -3
- {skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/RECORD +21 -21
- {skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.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 = '
|
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.
|
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.)
|
sky/provision/nebius/utils.py
CHANGED
@@ -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
|
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.
|
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.
|
sky/server/requests/executor.py
CHANGED
@@ -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)
|
sky/server/requests/payloads.py
CHANGED
@@ -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] =
|
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.
|
219
|
-
|
220
|
-
|
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
|
253
|
-
|
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
|
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
|
|
{skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/RECORD
RENAMED
@@ -1,14 +1,14 @@
|
|
1
|
-
sky/__init__.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
238
|
-
sky/server/requests/payloads.py,sha256=
|
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=
|
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
|
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.
|
348
|
-
skypilot_nightly-1.0.0.
|
349
|
-
skypilot_nightly-1.0.0.
|
350
|
-
skypilot_nightly-1.0.0.
|
351
|
-
skypilot_nightly-1.0.0.
|
352
|
-
skypilot_nightly-1.0.0.
|
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,,
|
File without changes
|
{skypilot_nightly-1.0.0.dev20250223.dist-info → skypilot_nightly-1.0.0.dev20250225.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|