skypilot-nightly 1.0.0.dev20250701__py3-none-any.whl → 1.0.0.dev20250703__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/catalog/__init__.py +1 -1
- sky/client/cli/command.py +60 -21
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/{Md3rlE87jmL5uv7gSo8mR → A-fbCEgJE_q2cV8biIOIr}/_buildManifest.js +1 -1
- sky/dashboard/out/_next/static/chunks/9984.b56614f3c4c5961d.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-1159f362b960e2b8.js +6 -0
- sky/dashboard/out/_next/static/chunks/{webpack-d427db53e54de9ce.js → webpack-9a81ea998672c303.js} +1 -1
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/jobs/server/core.py +13 -10
- sky/metrics/__init__.py +0 -0
- sky/metrics/utils.py +210 -0
- sky/optimizer.py +1 -1
- sky/resources.py +145 -7
- sky/server/common.py +13 -2
- sky/server/server.py +91 -7
- sky/skylet/constants.py +3 -0
- sky/skypilot_config.py +62 -53
- sky/utils/accelerator_registry.py +28 -1
- sky/utils/schemas.py +3 -0
- sky/utils/ux_utils.py +9 -4
- {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/RECORD +41 -39
- sky/dashboard/out/_next/static/chunks/9984.739ae958a066298d.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b8e1114e6d38218c.js +0 -6
- /sky/dashboard/out/_next/static/{Md3rlE87jmL5uv7gSo8mR → A-fbCEgJE_q2cV8biIOIr}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/top_level.txt +0 -0
sky/server/server.py
CHANGED
@@ -14,6 +14,7 @@ import os
|
|
14
14
|
import pathlib
|
15
15
|
import posixpath
|
16
16
|
import re
|
17
|
+
import resource
|
17
18
|
import shutil
|
18
19
|
import sys
|
19
20
|
import threading
|
@@ -39,6 +40,7 @@ from sky import models
|
|
39
40
|
from sky import sky_logging
|
40
41
|
from sky.data import storage_utils
|
41
42
|
from sky.jobs.server import server as jobs_rest
|
43
|
+
from sky.metrics import utils as metrics_utils
|
42
44
|
from sky.provision.kubernetes import utils as kubernetes_utils
|
43
45
|
from sky.serve.server import server as serve_rest
|
44
46
|
from sky.server import common
|
@@ -218,14 +220,26 @@ class RequestIDMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
|
|
218
220
|
|
219
221
|
|
220
222
|
def _get_auth_user_header(request: fastapi.Request) -> Optional[models.User]:
|
221
|
-
|
223
|
+
header_name = os.environ.get(constants.ENV_VAR_SERVER_AUTH_USER_HEADER,
|
224
|
+
'X-Auth-Request-Email')
|
225
|
+
if header_name not in request.headers:
|
222
226
|
return None
|
223
|
-
user_name = request.headers[
|
227
|
+
user_name = request.headers[header_name]
|
224
228
|
user_hash = hashlib.md5(
|
225
229
|
user_name.encode()).hexdigest()[:common_utils.USER_HASH_LENGTH]
|
226
230
|
return models.User(id=user_hash, name=user_name)
|
227
231
|
|
228
232
|
|
233
|
+
class InitializeRequestAuthUserMiddleware(
|
234
|
+
starlette.middleware.base.BaseHTTPMiddleware):
|
235
|
+
|
236
|
+
async def dispatch(self, request: fastapi.Request, call_next):
|
237
|
+
# Make sure that request.state.auth_user is set. Otherwise, we may get a
|
238
|
+
# KeyError while trying to read it.
|
239
|
+
request.state.auth_user = None
|
240
|
+
return await call_next(request)
|
241
|
+
|
242
|
+
|
229
243
|
class BasicAuthMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
|
230
244
|
"""Middleware to handle HTTP Basic Auth."""
|
231
245
|
|
@@ -406,6 +420,18 @@ class AuthProxyMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
|
|
406
420
|
async def dispatch(self, request: fastapi.Request, call_next):
|
407
421
|
auth_user = _get_auth_user_header(request)
|
408
422
|
|
423
|
+
if request.state.auth_user is not None:
|
424
|
+
# Previous middleware is trusted more than this middleware. For
|
425
|
+
# instance, a client could set the Authorization and the
|
426
|
+
# X-Auth-Request-Email header. In that case, the auth proxy will be
|
427
|
+
# skipped and we should rely on the Bearer token to authenticate the
|
428
|
+
# user - but that means the user could set X-Auth-Request-Email to
|
429
|
+
# whatever the user wants. We should thus ignore it.
|
430
|
+
if auth_user is not None:
|
431
|
+
logger.debug('Warning: ignoring auth proxy header since the '
|
432
|
+
'auth user was already set.')
|
433
|
+
return await call_next(request)
|
434
|
+
|
409
435
|
# Add user to database if auth_user is present
|
410
436
|
if auth_user is not None:
|
411
437
|
newly_added = global_user_state.add_or_update_user(auth_user)
|
@@ -416,8 +442,6 @@ class AuthProxyMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
|
|
416
442
|
# Store user info in request.state for access by GET endpoints
|
417
443
|
if auth_user is not None:
|
418
444
|
request.state.auth_user = auth_user
|
419
|
-
else:
|
420
|
-
request.state.auth_user = None
|
421
445
|
|
422
446
|
await _override_user_info_in_request_body(request, auth_user)
|
423
447
|
return await call_next(request)
|
@@ -536,10 +560,17 @@ class GracefulShutdownMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
|
|
536
560
|
|
537
561
|
|
538
562
|
app = fastapi.FastAPI(prefix='/api/v1', debug=True, lifespan=lifespan)
|
563
|
+
# Middleware wraps in the order defined here. E.g., given
|
564
|
+
# app.add_middleware(Middleware1)
|
565
|
+
# app.add_middleware(Middleware2)
|
566
|
+
# app.add_middleware(Middleware3)
|
567
|
+
# The effect will be like:
|
568
|
+
# Middleware3(Middleware2(Middleware1(request)))
|
569
|
+
# If MiddlewareN does something like print(n); call_next(); print(n), you'll get
|
570
|
+
# 3; 2; 1; <request>; 1; 2; 3
|
539
571
|
# Use environment variable to make the metrics middleware optional.
|
540
572
|
if os.environ.get(constants.ENV_VAR_SERVER_METRICS_ENABLED):
|
541
573
|
app.add_middleware(metrics.PrometheusMiddleware)
|
542
|
-
app.add_middleware(RBACMiddleware)
|
543
574
|
app.add_middleware(InternalDashboardPrefixMiddleware)
|
544
575
|
app.add_middleware(GracefulShutdownMiddleware)
|
545
576
|
app.add_middleware(PathCleanMiddleware)
|
@@ -552,15 +583,26 @@ app.add_middleware(
|
|
552
583
|
allow_credentials=True,
|
553
584
|
allow_methods=['*'],
|
554
585
|
allow_headers=['*'],
|
555
|
-
# TODO(syang): remove X-Request-ID when v0.10.0 is released.
|
586
|
+
# TODO(syang): remove X-Request-ID \when v0.10.0 is released.
|
556
587
|
expose_headers=['X-Request-ID', 'X-Skypilot-Request-ID'])
|
588
|
+
# The order of all the authentication-related middleware is important.
|
589
|
+
# RBACMiddleware must precede all the auth middleware, so it can access
|
590
|
+
# request.state.auth_user.
|
591
|
+
app.add_middleware(RBACMiddleware)
|
592
|
+
# AuthProxyMiddleware should precede BasicAuthMiddleware and
|
593
|
+
# BearerTokenMiddleware, since it should be skipped if either of those set the
|
594
|
+
# auth user.
|
595
|
+
app.add_middleware(AuthProxyMiddleware)
|
557
596
|
enable_basic_auth = os.environ.get(constants.ENV_VAR_ENABLE_BASIC_AUTH, 'false')
|
558
597
|
if str(enable_basic_auth).lower() == 'true':
|
559
598
|
app.add_middleware(BasicAuthMiddleware)
|
560
599
|
# Bearer token middleware should always be present to handle service account
|
561
600
|
# authentication
|
562
601
|
app.add_middleware(BearerTokenMiddleware)
|
563
|
-
|
602
|
+
# InitializeRequestAuthUserMiddleware must be the last added middleware so that
|
603
|
+
# request.state.auth_user is always set, but can be overridden by the auth
|
604
|
+
# middleware above.
|
605
|
+
app.add_middleware(InitializeRequestAuthUserMiddleware)
|
564
606
|
app.add_middleware(RequestIDMiddleware)
|
565
607
|
app.include_router(jobs_rest.router, prefix='/jobs', tags=['jobs'])
|
566
608
|
app.include_router(serve_rest.router, prefix='/serve', tags=['serve'])
|
@@ -573,6 +615,16 @@ app.include_router(ssh_node_pools_rest.router,
|
|
573
615
|
prefix='/ssh_node_pools',
|
574
616
|
tags=['ssh_node_pools'])
|
575
617
|
|
618
|
+
# Increase the limit of files we can open to our hard limit. This fixes bugs
|
619
|
+
# where we can not aquire file locks or open enough logs and the API server
|
620
|
+
# crashes. On Mac, the hard limit is 9,223,372,036,854,775,807.
|
621
|
+
# TODO(luca) figure out what to do if we need to open more than 2^63 files.
|
622
|
+
try:
|
623
|
+
soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
|
624
|
+
resource.setrlimit(resource.RLIMIT_NOFILE, (hard, hard))
|
625
|
+
except Exception: # pylint: disable=broad-except
|
626
|
+
pass # no issue, we will warn the user later if its too low
|
627
|
+
|
576
628
|
|
577
629
|
@app.get('/token')
|
578
630
|
async def token(request: fastapi.Request,
|
@@ -1576,6 +1628,38 @@ async def all_contexts(request: fastapi.Request) -> None:
|
|
1576
1628
|
)
|
1577
1629
|
|
1578
1630
|
|
1631
|
+
@app.get('/gpu-metrics')
|
1632
|
+
async def gpu_metrics() -> fastapi.Response:
|
1633
|
+
"""Gets the GPU metrics from multiple external k8s clusters"""
|
1634
|
+
contexts = core.get_all_contexts()
|
1635
|
+
all_metrics = []
|
1636
|
+
successful_contexts = 0
|
1637
|
+
|
1638
|
+
tasks = [
|
1639
|
+
asyncio.create_task(metrics_utils.get_metrics_for_context(context))
|
1640
|
+
for context in contexts
|
1641
|
+
if context != 'in-cluster'
|
1642
|
+
]
|
1643
|
+
|
1644
|
+
results = await asyncio.gather(*tasks, return_exceptions=True)
|
1645
|
+
|
1646
|
+
for i, result in enumerate(results):
|
1647
|
+
if isinstance(result, Exception):
|
1648
|
+
logger.error(
|
1649
|
+
f'Failed to get metrics for context {contexts[i]}: {result}')
|
1650
|
+
else:
|
1651
|
+
metrics_text = result
|
1652
|
+
all_metrics.append(metrics_text)
|
1653
|
+
successful_contexts += 1
|
1654
|
+
|
1655
|
+
combined_metrics = '\n\n'.join(all_metrics)
|
1656
|
+
|
1657
|
+
# Return as plain text for Prometheus compatibility
|
1658
|
+
return fastapi.Response(
|
1659
|
+
content=combined_metrics,
|
1660
|
+
media_type='text/plain; version=0.0.4; charset=utf-8')
|
1661
|
+
|
1662
|
+
|
1579
1663
|
# === Internal APIs ===
|
1580
1664
|
@app.get('/api/completion/cluster_name')
|
1581
1665
|
async def complete_cluster_name(incomplete: str,) -> List[str]:
|
sky/skylet/constants.py
CHANGED
@@ -421,6 +421,9 @@ ENV_VAR_IS_SKYPILOT_SERVER = 'IS_SKYPILOT_SERVER'
|
|
421
421
|
# Environment variable that is set to 'true' if metrics are enabled.
|
422
422
|
ENV_VAR_SERVER_METRICS_ENABLED = 'SKY_API_SERVER_METRICS_ENABLED'
|
423
423
|
|
424
|
+
# If set, overrides the header that we can use to get the user name.
|
425
|
+
ENV_VAR_SERVER_AUTH_USER_HEADER = f'{SKYPILOT_ENV_VAR_PREFIX}AUTH_USER_HEADER'
|
426
|
+
|
424
427
|
# Environment variable that is used as the DB connection string for the
|
425
428
|
# skypilot server.
|
426
429
|
ENV_VAR_DB_CONNECTION_URI = (f'{SKYPILOT_ENV_VAR_PREFIX}DB_CONNECTION_URI')
|
sky/skypilot_config.py
CHANGED
@@ -63,6 +63,7 @@ from sqlalchemy import orm
|
|
63
63
|
from sqlalchemy.dialects import postgresql
|
64
64
|
from sqlalchemy.dialects import sqlite
|
65
65
|
from sqlalchemy.ext import declarative
|
66
|
+
from sqlalchemy.pool import NullPool
|
66
67
|
|
67
68
|
from sky import exceptions
|
68
69
|
from sky import sky_logging
|
@@ -116,9 +117,10 @@ ENV_VAR_PROJECT_CONFIG = f'{constants.SKYPILOT_ENV_VAR_PREFIX}PROJECT_CONFIG'
|
|
116
117
|
_GLOBAL_CONFIG_PATH = '~/.sky/config.yaml'
|
117
118
|
_PROJECT_CONFIG_PATH = '.sky.yaml'
|
118
119
|
|
119
|
-
_SQLALCHEMY_ENGINE: Optional[sqlalchemy.engine.Engine] = None
|
120
120
|
API_SERVER_CONFIG_KEY = 'api_server_config'
|
121
121
|
|
122
|
+
_DB_USE_LOCK = threading.Lock()
|
123
|
+
|
122
124
|
Base = declarative.declarative_base()
|
123
125
|
|
124
126
|
config_yaml_table = sqlalchemy.Table(
|
@@ -129,44 +131,6 @@ config_yaml_table = sqlalchemy.Table(
|
|
129
131
|
)
|
130
132
|
|
131
133
|
|
132
|
-
def create_table():
|
133
|
-
# Create tables if they don't exist
|
134
|
-
Base.metadata.create_all(bind=_SQLALCHEMY_ENGINE)
|
135
|
-
|
136
|
-
|
137
|
-
def _get_config_yaml_from_db(key: str) -> Optional[config_utils.Config]:
|
138
|
-
assert _SQLALCHEMY_ENGINE is not None
|
139
|
-
with orm.Session(_SQLALCHEMY_ENGINE) as session:
|
140
|
-
row = session.query(config_yaml_table).filter_by(key=key).first()
|
141
|
-
if row:
|
142
|
-
db_config = config_utils.Config(yaml.safe_load(row.value))
|
143
|
-
db_config.pop_nested(('db',), None)
|
144
|
-
return db_config
|
145
|
-
return None
|
146
|
-
|
147
|
-
|
148
|
-
def _set_config_yaml_to_db(key: str, config: config_utils.Config):
|
149
|
-
assert _SQLALCHEMY_ENGINE is not None
|
150
|
-
config.pop_nested(('db',), None)
|
151
|
-
config_str = common_utils.dump_yaml_str(dict(config))
|
152
|
-
with orm.Session(_SQLALCHEMY_ENGINE) as session:
|
153
|
-
if (_SQLALCHEMY_ENGINE.dialect.name ==
|
154
|
-
db_utils.SQLAlchemyDialect.SQLITE.value):
|
155
|
-
insert_func = sqlite.insert
|
156
|
-
elif (_SQLALCHEMY_ENGINE.dialect.name ==
|
157
|
-
db_utils.SQLAlchemyDialect.POSTGRESQL.value):
|
158
|
-
insert_func = postgresql.insert
|
159
|
-
else:
|
160
|
-
raise ValueError('Unsupported database dialect')
|
161
|
-
insert_stmnt = insert_func(config_yaml_table).values(key=key,
|
162
|
-
value=config_str)
|
163
|
-
do_update_stmt = insert_stmnt.on_conflict_do_update(
|
164
|
-
index_elements=[config_yaml_table.c.key],
|
165
|
-
set_={config_yaml_table.c.value: config_str})
|
166
|
-
session.execute(do_update_stmt)
|
167
|
-
session.commit()
|
168
|
-
|
169
|
-
|
170
134
|
class ConfigContext:
|
171
135
|
|
172
136
|
def __init__(self,
|
@@ -586,7 +550,6 @@ def _reload_config_from_internal_file(internal_config_path: str) -> None:
|
|
586
550
|
|
587
551
|
|
588
552
|
def _reload_config_as_server() -> None:
|
589
|
-
global _SQLALCHEMY_ENGINE
|
590
553
|
# Reset the global variables, to avoid using stale values.
|
591
554
|
_set_loaded_config(config_utils.Config())
|
592
555
|
_set_loaded_config_path(None)
|
@@ -607,16 +570,33 @@ def _reload_config_as_server() -> None:
|
|
607
570
|
'if db config is specified, no other config is allowed')
|
608
571
|
|
609
572
|
if db_url:
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
573
|
+
with _DB_USE_LOCK:
|
574
|
+
sqlalchemy_engine = sqlalchemy.create_engine(db_url,
|
575
|
+
poolclass=NullPool)
|
576
|
+
Base.metadata.create_all(bind=sqlalchemy_engine)
|
577
|
+
|
578
|
+
def _get_config_yaml_from_db(
|
579
|
+
key: str) -> Optional[config_utils.Config]:
|
580
|
+
assert sqlalchemy_engine is not None
|
581
|
+
with orm.Session(sqlalchemy_engine) as session:
|
582
|
+
row = session.query(config_yaml_table).filter_by(
|
583
|
+
key=key).first()
|
584
|
+
if row:
|
585
|
+
db_config = config_utils.Config(yaml.safe_load(row.value))
|
586
|
+
db_config.pop_nested(('db',), None)
|
587
|
+
return db_config
|
588
|
+
return None
|
589
|
+
|
590
|
+
db_config = _get_config_yaml_from_db(API_SERVER_CONFIG_KEY)
|
591
|
+
if db_config:
|
592
|
+
if sky_logging.logging_enabled(logger, sky_logging.DEBUG):
|
593
|
+
logger.debug(
|
594
|
+
f'Config loaded from db:\n'
|
595
|
+
f'{common_utils.dump_yaml_str(dict(db_config))}')
|
596
|
+
server_config = overlay_skypilot_config(server_config,
|
597
|
+
db_config)
|
598
|
+
# Close the engine to avoid connection leaks
|
599
|
+
sqlalchemy_engine.dispose()
|
620
600
|
_set_loaded_config(server_config)
|
621
601
|
_set_loaded_config_path(server_config_path)
|
622
602
|
|
@@ -876,9 +856,38 @@ def update_api_server_config_no_lock(config: config_utils.Config) -> None:
|
|
876
856
|
new_db_url = config.get_nested(('db',), None)
|
877
857
|
if new_db_url and new_db_url != existing_db_url:
|
878
858
|
raise ValueError('Cannot change db url while server is running')
|
879
|
-
|
880
|
-
|
881
|
-
|
859
|
+
with _DB_USE_LOCK:
|
860
|
+
sqlalchemy_engine = sqlalchemy.create_engine(existing_db_url,
|
861
|
+
poolclass=NullPool)
|
862
|
+
Base.metadata.create_all(bind=sqlalchemy_engine)
|
863
|
+
|
864
|
+
def _set_config_yaml_to_db(key: str,
|
865
|
+
config: config_utils.Config):
|
866
|
+
assert sqlalchemy_engine is not None
|
867
|
+
config.pop_nested(('db',), None)
|
868
|
+
config_str = common_utils.dump_yaml_str(dict(config))
|
869
|
+
with orm.Session(sqlalchemy_engine) as session:
|
870
|
+
if (sqlalchemy_engine.dialect.name ==
|
871
|
+
db_utils.SQLAlchemyDialect.SQLITE.value):
|
872
|
+
insert_func = sqlite.insert
|
873
|
+
elif (sqlalchemy_engine.dialect.name ==
|
874
|
+
db_utils.SQLAlchemyDialect.POSTGRESQL.value):
|
875
|
+
insert_func = postgresql.insert
|
876
|
+
else:
|
877
|
+
raise ValueError('Unsupported database dialect')
|
878
|
+
insert_stmnt = insert_func(config_yaml_table).values(
|
879
|
+
key=key, value=config_str)
|
880
|
+
do_update_stmt = insert_stmnt.on_conflict_do_update(
|
881
|
+
index_elements=[config_yaml_table.c.key],
|
882
|
+
set_={config_yaml_table.c.value: config_str})
|
883
|
+
session.execute(do_update_stmt)
|
884
|
+
session.commit()
|
885
|
+
|
886
|
+
logger.debug('saving api_server config to db')
|
887
|
+
_set_config_yaml_to_db(API_SERVER_CONFIG_KEY, config)
|
888
|
+
db_updated = True
|
889
|
+
# Close the engine to avoid connection leaks
|
890
|
+
sqlalchemy_engine.dispose()
|
882
891
|
|
883
892
|
if not db_updated:
|
884
893
|
# save to the local file (PVC in Kubernetes, local file otherwise)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"""Accelerator registry."""
|
2
2
|
import typing
|
3
|
-
from typing import Optional
|
3
|
+
from typing import List, Optional
|
4
4
|
|
5
5
|
from sky import catalog
|
6
6
|
from sky.utils import rich_utils
|
@@ -35,6 +35,7 @@ if typing.TYPE_CHECKING:
|
|
35
35
|
# Use a cached version of accelerators to cloud mapping, so that we don't have
|
36
36
|
# to download and read the catalog file for every cloud locally.
|
37
37
|
_accelerator_df = catalog.common.read_catalog('common/accelerators.csv')
|
38
|
+
_memory_df = catalog.common.read_catalog('common/metadata.csv')
|
38
39
|
|
39
40
|
# List of non-GPU accelerators that are supported by our backend for job queue
|
40
41
|
# scheduling.
|
@@ -45,6 +46,32 @@ _SCHEDULABLE_NON_GPU_ACCELERATORS = [
|
|
45
46
|
]
|
46
47
|
|
47
48
|
|
49
|
+
def get_devices_by_memory(memory: float,
|
50
|
+
plus: bool = False,
|
51
|
+
manufacturer: Optional[str] = None) -> List[str]:
|
52
|
+
"""Returns a list of device names that meet the memory and manufacturer
|
53
|
+
requirements.
|
54
|
+
|
55
|
+
Args:
|
56
|
+
memory: The minimum memory size in GB.
|
57
|
+
plus: If True, returns devices with memory >= memory, otherwise returns
|
58
|
+
devices with memory == memory.
|
59
|
+
manufacturer: The manufacturer of the GPU.
|
60
|
+
"""
|
61
|
+
|
62
|
+
# Filter by memory requirements
|
63
|
+
if plus:
|
64
|
+
df = _memory_df[_memory_df['MemoryGB'] >= memory]
|
65
|
+
else:
|
66
|
+
df = _memory_df[_memory_df['MemoryGB'] == memory]
|
67
|
+
|
68
|
+
# Filter by manufacturer if specified
|
69
|
+
if manufacturer is not None:
|
70
|
+
df = df[df['Manufacturer'].str.lower() == manufacturer.lower()]
|
71
|
+
|
72
|
+
return df['GPU'].tolist()
|
73
|
+
|
74
|
+
|
48
75
|
def is_schedulable_non_gpu_accelerator(accelerator_name: str) -> bool:
|
49
76
|
"""Returns if this accelerator is a 'schedulable' non-GPU accelerator."""
|
50
77
|
for name in _SCHEDULABLE_NON_GPU_ACCELERATORS:
|
sky/utils/schemas.py
CHANGED
sky/utils/ux_utils.py
CHANGED
@@ -12,6 +12,7 @@ import colorama
|
|
12
12
|
from sky import sky_logging
|
13
13
|
from sky.skylet import constants
|
14
14
|
from sky.utils import common_utils
|
15
|
+
from sky.utils import env_options
|
15
16
|
from sky.utils import rich_console_utils
|
16
17
|
|
17
18
|
if typing.TYPE_CHECKING:
|
@@ -57,10 +58,14 @@ def print_exception_no_traceback():
|
|
57
58
|
if error():
|
58
59
|
raise ValueError('...')
|
59
60
|
"""
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
if env_options.Options.SHOW_DEBUG_INFO.get():
|
62
|
+
# When SKYPILOT_DEBUG is set, show the full traceback
|
63
|
+
yield
|
64
|
+
else:
|
65
|
+
original_tracelimit = getattr(sys, 'tracebacklimit', 1000)
|
66
|
+
sys.tracebacklimit = 0
|
67
|
+
yield
|
68
|
+
sys.tracebacklimit = original_tracelimit
|
64
69
|
|
65
70
|
|
66
71
|
@contextlib.contextmanager
|
{skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
sky/__init__.py,sha256=
|
1
|
+
sky/__init__.py,sha256=HYORW0WyBLZnvFY4uVWHILG1Ai9Z63rJxFMVnszizFg,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
|
@@ -10,10 +10,10 @@ sky/exceptions.py,sha256=YRPgpFkBRGE9jmG2r3SWJGS9p9-RPP2TZGjfd2VblSc,19044
|
|
10
10
|
sky/execution.py,sha256=BhI4paGKpXMhWJoelHFe7LGFbCnW7hl0rIAmdIay-dk,33223
|
11
11
|
sky/global_user_state.py,sha256=8_oKM5l5aey_IadFC6beiilfsbG10J27sqVxnHxFc7A,73040
|
12
12
|
sky/models.py,sha256=Eor-cT4D71QTimogcnJ5ey1G1PXK-OXN-snEtE8Uu_g,3152
|
13
|
-
sky/optimizer.py,sha256=
|
14
|
-
sky/resources.py,sha256=
|
13
|
+
sky/optimizer.py,sha256=oE4NrDmyE1A9B5NI3T_s7QUV5HkCeSJUU75NoJoVIPI,63323
|
14
|
+
sky/resources.py,sha256=bvmapuT5vBZQShWtdpfOw3o3hNjsjQslxmpxCfF6-64,106309
|
15
15
|
sky/sky_logging.py,sha256=cMurxhFExKEFX1frcMR71Ti_s9Obg9WY30veVxsZB6o,7285
|
16
|
-
sky/skypilot_config.py,sha256=
|
16
|
+
sky/skypilot_config.py,sha256=TjuYBU99GLhWD7E9ioAP7qiiHJybc5EY_T1A_rFW-rM,36222
|
17
17
|
sky/task.py,sha256=ftmaGsxLoX8Uewzh45OjhlPDJu5n3060Za1S0X9i7M0,71076
|
18
18
|
sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
19
|
sky/adaptors/aws.py,sha256=4caUTO5nxZQyDVPyQdoPljaF-Lz_Fa6NEnu3FfmLZd4,8633
|
@@ -40,7 +40,7 @@ sky/backends/docker_utils.py,sha256=Hyw1YY20EyghhEbYx6O2FIMDcGkNzBzV9TM7LFynei8,
|
|
40
40
|
sky/backends/local_docker_backend.py,sha256=r80BGJZmAH8F49v6Y_pG3_pHmW5LQEQRusLkKoYoe9Q,17047
|
41
41
|
sky/backends/wheel_utils.py,sha256=IUruJijm5854UGDdSayHbHzjjWRM46bATK1nSnK44xY,11071
|
42
42
|
sky/backends/monkey_patches/monkey_patch_ray_up.py,sha256=76-y2fCaE3JINj8lEwHT1eirYzCbpD8O1ySsysuGu8o,3450
|
43
|
-
sky/catalog/__init__.py,sha256=
|
43
|
+
sky/catalog/__init__.py,sha256=SRV7fsgTDOtidYxXYzyxgPAQTQR6fsIb2epVISCH_AU,14616
|
44
44
|
sky/catalog/aws_catalog.py,sha256=VnFLKmr4nBuc5NXske7thEByJz_wOg9w5vuN6FtLMuo,13473
|
45
45
|
sky/catalog/azure_catalog.py,sha256=r_ZBacLF7U8EPGlrMF-zVSwAGjjmh9K1e1MZ3-UPfXo,8126
|
46
46
|
sky/catalog/common.py,sha256=KX77r8zPYe7hMX4Hf7_ny_wjC4Y9_FAskKb7qmr1aJY,28283
|
@@ -79,7 +79,7 @@ sky/client/oauth.py,sha256=sNJ_DMsSTcxluj5FeNQ2IafZJLImRFmCAZ79bXeABn4,2871
|
|
79
79
|
sky/client/sdk.py,sha256=uVzzJpsokxAdhLaK4JyMRia1wj6PI5qYpvBSZfnFwqk,91054
|
80
80
|
sky/client/service_account_auth.py,sha256=5jXk0G6ufuW-SHCO7BEHQeTO0_2a8KfFmA63auXFRj4,1529
|
81
81
|
sky/client/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
|
-
sky/client/cli/command.py,sha256=
|
82
|
+
sky/client/cli/command.py,sha256=tuK-39aOz9xresShPe4uvGAjn7OgnyxLovnycJUAzaE,217309
|
83
83
|
sky/client/cli/deprecation_utils.py,sha256=H_d5UyF2CekEoThduAzt5cihBO8hwKYMu0-Wqfbjv5E,3370
|
84
84
|
sky/client/cli/flags.py,sha256=6IdS_G2lB1C6r8kJMzLVREY_qV50VHiSfWlmppVrWuc,11623
|
85
85
|
sky/clouds/__init__.py,sha256=tC9_Vi6GvVceWUi6uZvm7vXzBa0uH3CjRQ-QCYqdJMw,1624
|
@@ -108,19 +108,19 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
|
|
108
108
|
sky/clouds/utils/gcp_utils.py,sha256=ZNupZEBsZS9ZvvzB7vsc6f5y1JUBoRcKE0erso_Y93k,7659
|
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=
|
112
|
-
sky/dashboard/out/clusters.html,sha256=
|
113
|
-
sky/dashboard/out/config.html,sha256
|
111
|
+
sky/dashboard/out/404.html,sha256=3Z9o8-G_0ariIM0EjvOMuFok7w5FIL3wsT3y7FxrQKc,1423
|
112
|
+
sky/dashboard/out/clusters.html,sha256=nGWP5odfKHxeIVIbwA1kzbT350a2NOVa9NpMsPX-xG4,1418
|
113
|
+
sky/dashboard/out/config.html,sha256=SJfQDV-NZXrfZlFLj6f_OCIFepaiJ5Z6rKSa9WSC-Cg,1414
|
114
114
|
sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
|
115
|
-
sky/dashboard/out/index.html,sha256=
|
116
|
-
sky/dashboard/out/infra.html,sha256=
|
117
|
-
sky/dashboard/out/jobs.html,sha256=
|
115
|
+
sky/dashboard/out/index.html,sha256=adPxHrDh5nHcfgvaahhjYEx3AzjAXlxvbZfZNRQPdDg,1407
|
116
|
+
sky/dashboard/out/infra.html,sha256=c5BiYNHeKaGqAfl_FFE5MpVaUAIpGap3Dfxc78vH3Tg,1412
|
117
|
+
sky/dashboard/out/jobs.html,sha256=MtDz29kuHJqiUfAMGa-xPjf8I9v7UGbTJbGdNXqjoDc,1410
|
118
118
|
sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
|
119
|
-
sky/dashboard/out/users.html,sha256=
|
120
|
-
sky/dashboard/out/volumes.html,sha256=
|
121
|
-
sky/dashboard/out/workspaces.html,sha256=
|
122
|
-
sky/dashboard/out/_next/static/
|
123
|
-
sky/dashboard/out/_next/static/
|
119
|
+
sky/dashboard/out/users.html,sha256=LQfZnMjkwRnp25ipelg-NIAxRTJW8OjjNuUDOBbW0gc,1412
|
120
|
+
sky/dashboard/out/volumes.html,sha256=kcLh9GM3mSxXfjaUbQev6BCdS2VNZr7XLE85SMT4Y0o,1416
|
121
|
+
sky/dashboard/out/workspaces.html,sha256=nrQcaWz2Uq7nO6sv9d-G5ISQSmEXcApFl6NAmdUoghM,1422
|
122
|
+
sky/dashboard/out/_next/static/A-fbCEgJE_q2cV8biIOIr/_buildManifest.js,sha256=SMKLljkiS_9UQoF0v1MyY_ziwbXl8KnBBlwCuTRc3V8,2235
|
123
|
+
sky/dashboard/out/_next/static/A-fbCEgJE_q2cV8biIOIr/_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
|
@@ -150,13 +150,13 @@ sky/dashboard/out/_next/static/chunks/8982.a2e214068f30a857.js,sha256=fQlHyU9rqS
|
|
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
|
152
152
|
sky/dashboard/out/_next/static/chunks/9470-21d059a1dfa03f61.js,sha256=CPmGRW2grevoF93p_jmh9tgO2X15tldm-_xFa4-qXXU,7887
|
153
|
-
sky/dashboard/out/_next/static/chunks/9984.
|
153
|
+
sky/dashboard/out/_next/static/chunks/9984.b56614f3c4c5961d.js,sha256=kij2wjmGv52Dl66I9E_Nrc7aG9JN_orwMY-GqPJriN8,41450
|
154
154
|
sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js,sha256=49S_KmXpB4D3U299iKHRbYnFxJnoeN36awxwhBbUn8U,172832
|
155
155
|
sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js,sha256=XKYUV5T_2HxRwN7wZa9-Lj1J5gHLS0TKT2t2GobVewY,140943
|
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-
|
159
|
+
sky/dashboard/out/_next/static/chunks/webpack-9a81ea998672c303.js,sha256=fUbydZntvLJZCDi467P46nwf0uvI6VRaNnpvsLirfDs,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
|
@@ -167,20 +167,20 @@ sky/dashboard/out/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js,sha256=DzFF
|
|
167
167
|
sky/dashboard/out/_next/static/chunks/pages/users-cd43fb3c122eedde.js,sha256=ZmBi5Bo3Nuc8h98X3A1f3Wf5vXXoJhSdf4dMArPfe0s,830
|
168
168
|
sky/dashboard/out/_next/static/chunks/pages/volumes-4ebf6484f7216387.js,sha256=1F6IwI6S3p3hsDBy_fuLwFRz3Elg0IfrWNj5z3fhxdg,827
|
169
169
|
sky/dashboard/out/_next/static/chunks/pages/workspaces-06bde99155fa6292.js,sha256=l9iLMdY_ShOHIo368M98I4mADuUWtiu_ZDHci8ffJjM,874
|
170
|
-
sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-
|
170
|
+
sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-1159f362b960e2b8.js,sha256=GqMjMN3_Z8kYZWCz01aabcu8epNuKAUihohv9wxF34Y,16659
|
171
171
|
sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-8135aba0712bda37.js,sha256=XaBZD-8HP9h4o5YnQ0oYQOUJd2-uimamGbYnlD_5YVg,21263
|
172
172
|
sky/dashboard/out/_next/static/chunks/pages/infra/[context]-8b0809f59034d509.js,sha256=2X6wnNqROGTzwZorrDJpUmO6XnUmS9VN3ImpTvhJ4IM,839
|
173
173
|
sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-c4d5cfac7fbc0668.js,sha256=4-YK-gpB6rWVM8QMkzaB8B_uUwI6As62G2rj9wGmqnE,25246
|
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=
|
178
|
-
sky/dashboard/out/clusters/[cluster]/[job].html,sha256=
|
179
|
-
sky/dashboard/out/infra/[context].html,sha256=
|
180
|
-
sky/dashboard/out/jobs/[job].html,sha256=
|
177
|
+
sky/dashboard/out/clusters/[cluster].html,sha256=mY0B5gBqQT3iNb0bN_EgEieJfSCgRn8GUYk7bl0C33g,2847
|
178
|
+
sky/dashboard/out/clusters/[cluster]/[job].html,sha256=AhJQHw0K7mci6JCElhojEl48QV5BXMjAfj4A4XbFX0c,2160
|
179
|
+
sky/dashboard/out/infra/[context].html,sha256=mSeFwt9GELEjyn-_E2iieEb-buu1VsyW0KRKA7qtds0,1436
|
180
|
+
sky/dashboard/out/jobs/[job].html,sha256=xAah-qb6eem_iCkDpGaZNeJ3S2z6WRejS3_U-sycrUQ,2304
|
181
181
|
sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
|
182
|
-
sky/dashboard/out/workspace/new.html,sha256=
|
183
|
-
sky/dashboard/out/workspaces/[name].html,sha256=
|
182
|
+
sky/dashboard/out/workspace/new.html,sha256=yS_2o5DPO-pTtHFCxQ93lEjrjrzEy-NyQOTqErOlCF8,1428
|
183
|
+
sky/dashboard/out/workspaces/[name].html,sha256=T9-LqiM6c38fzGRacsi92uruk71NiDw2F8bOn1Y5glo,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
|
@@ -197,11 +197,13 @@ sky/jobs/utils.py,sha256=gfW4smCWWMmE4OwIbEqI5j5gVh5Gvfs6paqKQR2Tia8,70920
|
|
197
197
|
sky/jobs/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
198
198
|
sky/jobs/client/sdk.py,sha256=0ZDm5h1kqPYXvsgiXBhbsXj9jfKW7GHH_VtQbSQjmCw,11068
|
199
199
|
sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
200
|
-
sky/jobs/server/core.py,sha256=
|
200
|
+
sky/jobs/server/core.py,sha256=fLj6k6m2SkU6UJT24rhtoUrmASPrnMay_Rkm5KqMvs4,31720
|
201
201
|
sky/jobs/server/server.py,sha256=ae8JAs-2ipWqL_GsA3x8T2mY-OJLc3ioWg_CfRzCUIY,4011
|
202
202
|
sky/logs/__init__.py,sha256=0ybWMfXcpAzh8dtDnJwpfovNIk0zJRJvzdISqFdKmdE,549
|
203
203
|
sky/logs/agent.py,sha256=tv0C40_FauZpvU93Ro_mC23LnaXWhSTjqch1JQMXiqw,2771
|
204
204
|
sky/logs/gcp.py,sha256=eKVEcHO3FJRg_YTcE9omE8uAIF6AdBWWpkEPqWFAqXg,3857
|
205
|
+
sky/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
206
|
+
sky/metrics/utils.py,sha256=Cww3yNG4HyW4DEdLOFUayFgMZ16t2JFSvvhuTTV7Vio,7654
|
205
207
|
sky/provision/__init__.py,sha256=bADZkpZdy7QxIc7WDkh-X5cd3Uv64wy2K7IB9Xpw348,7554
|
206
208
|
sky/provision/common.py,sha256=LdjM9SL9NDtsARom12tVv_WoUNL3PTlU5RoLfeWGGgM,10807
|
207
209
|
sky/provision/constants.py,sha256=oc_XDUkcoLQ_lwDy5yMeMSWviKS0j0s1c0pjlvpNeWY,800
|
@@ -319,12 +321,12 @@ sky/serve/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
319
321
|
sky/serve/server/core.py,sha256=zKvDnq6W9CftH5ljmNMdTDGsLO3mzbFgrMBMCSua4dM,41662
|
320
322
|
sky/serve/server/server.py,sha256=A9K37a0nQgZeN3eKWv62Oh2C5TSAReTZ9pHmztqlI-c,4396
|
321
323
|
sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
|
322
|
-
sky/server/common.py,sha256=
|
324
|
+
sky/server/common.py,sha256=prLb_p0wuHwTRNhF0zAUzxeWhhpZNvbET3t1N7KYUsY,36670
|
323
325
|
sky/server/config.py,sha256=XWf5Kw4am6vMO5wcyWevbQAFH-dmKb7AMEgDzD083-M,8538
|
324
326
|
sky/server/constants.py,sha256=15r9CGX4yo62BeRLSfyrVaKd5fqeu_8GBS_JqyeXSfk,1431
|
325
327
|
sky/server/metrics.py,sha256=aVRaSwpBVXE9dXIVd9bNsSigKM4bkqNq0eTpP0Noyo8,3657
|
326
328
|
sky/server/rest.py,sha256=3xOQXsQ_r9XBcUOhQbf-Wk0UXx0XrAmzQ6JSqLr6nJ0,5430
|
327
|
-
sky/server/server.py,sha256=
|
329
|
+
sky/server/server.py,sha256=KXv-Q3tAJ0flFoKYG0xjpcJTqALn7iMvCni5883f95c,71254
|
328
330
|
sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
|
329
331
|
sky/server/stream_utils.py,sha256=RS4RuMxQqTGqp3uxzZVtmFWzos4d49P7hMX_VklzEVU,9189
|
330
332
|
sky/server/uvicorn.py,sha256=3mdSUbc8zHRYAbZZLkfPB6U9VXD_t2jDM1BMjpTx1Mo,9014
|
@@ -351,7 +353,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
351
353
|
sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
|
352
354
|
sky/skylet/autostop_lib.py,sha256=kGUnHm-jpF4zl3UJfB-4pnoldWpnVeR96WwYGSw7em0,4630
|
353
355
|
sky/skylet/configs.py,sha256=kV490lonYVVQMDRO2haizlt9fpQmqBIpwBScn14zS78,2132
|
354
|
-
sky/skylet/constants.py,sha256=
|
356
|
+
sky/skylet/constants.py,sha256=jveG7A_vi3mWIG8Ix5_vD2GnmTSm8gGalXxyxsx7yQ8,23452
|
355
357
|
sky/skylet/events.py,sha256=pnV3ZiwWhXqTHpU5B5Y9Xwam_7FQDI6IrxgSx7X_NVA,12743
|
356
358
|
sky/skylet/job_lib.py,sha256=aZ_lUU1u0HVU2AdTcYcFUAS7eeelK-bAbJlCoZ3QX7A,48267
|
357
359
|
sky/skylet/log_lib.py,sha256=9nLOhevnM668itQyVyPSoQHKfZ2MWm_FwXPxK28X0oM,23201
|
@@ -411,7 +413,7 @@ sky/users/rbac.py,sha256=3ZWukXo85u6zWbPmHcPsF9EtZ3cd_51PLZYf2h-7uAM,3636
|
|
411
413
|
sky/users/server.py,sha256=59I2WITevRqvo-kEzmP0p0qyEYATnUQXTRvA_81xZYM,27922
|
412
414
|
sky/users/token_service.py,sha256=nzIryoYSbw58SceBVRJ4VF7Z9beTSpYZd6WSyYYzK-s,7179
|
413
415
|
sky/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
414
|
-
sky/utils/accelerator_registry.py,sha256=
|
416
|
+
sky/utils/accelerator_registry.py,sha256=I2BLe74i7qBTE4X73N-cVbOJNX1Pcextm9OIRQFfnl0,4803
|
415
417
|
sky/utils/admin_policy_utils.py,sha256=VkE3FGzv5a7KnRO0R1PX0buJ274vF__n1xgXJ_9ykTs,7105
|
416
418
|
sky/utils/annotations.py,sha256=-rfacB30Sl0xkFriejGvxma3oKctGfXXLZkQPHG33eo,1626
|
417
419
|
sky/utils/atomic.py,sha256=vrw-7XCnckF0xCx-ttamao7evPdGtVsnjaTtgMlBXIE,1280
|
@@ -437,11 +439,11 @@ sky/utils/resource_checker.py,sha256=N18XhoVIqjY1VzmKvxQxRchRgC2WIgcEQyHDkLvg4Y8
|
|
437
439
|
sky/utils/resources_utils.py,sha256=9HyFUySaXZsF_XKJvJa1_dy35CrX5tAm5HoOnpYWREo,15106
|
438
440
|
sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
|
439
441
|
sky/utils/rich_utils.py,sha256=ZKztFc0D5q7ma_NE2p9UKjVS9zqcJ3L53FRw6SPoUvg,14707
|
440
|
-
sky/utils/schemas.py,sha256=
|
442
|
+
sky/utils/schemas.py,sha256=pfoJA2EXYp0NOUj20D3lw232Pw8XGuVyf6KkvJ8vUmE,51726
|
441
443
|
sky/utils/status_lib.py,sha256=QGkd6COD1GX1h30Mk9RMUdyeUOMJs5971GkxTcFgdsU,1705
|
442
444
|
sky/utils/subprocess_utils.py,sha256=tOpFY_1ml7JkVGAN1o473lcKPklGR95qBCW61eu8kEo,15773
|
443
445
|
sky/utils/timeline.py,sha256=ob6s3bc7nwAuSI76yLKBrSR5bzOHnOhbozz1avwoet4,4070
|
444
|
-
sky/utils/ux_utils.py,sha256=
|
446
|
+
sky/utils/ux_utils.py,sha256=hris-DNQR0-okNOzH2EZQJXBPWAn3LdAl3dtl9KPgng,10419
|
445
447
|
sky/utils/validator.py,sha256=AHIYEBpxzpC2Eg8TulruFqQSjTxeynB0Dc7cfP1RX2M,1159
|
446
448
|
sky/utils/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
447
449
|
sky/utils/aws/get_default_security_group.py,sha256=LPzz5133ZUMbzDD3iqqACL9PdlgqiQR5hKZIn-D1zhw,228
|
@@ -476,9 +478,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
476
478
|
sky/workspaces/core.py,sha256=MkQoVqWN67tf4VRq284U9vgAw4lwb_cpUfwHQT4V9Ow,16598
|
477
479
|
sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
|
478
480
|
sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
|
479
|
-
skypilot_nightly-1.0.0.
|
480
|
-
skypilot_nightly-1.0.0.
|
481
|
-
skypilot_nightly-1.0.0.
|
482
|
-
skypilot_nightly-1.0.0.
|
483
|
-
skypilot_nightly-1.0.0.
|
484
|
-
skypilot_nightly-1.0.0.
|
481
|
+
skypilot_nightly-1.0.0.dev20250703.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
|
482
|
+
skypilot_nightly-1.0.0.dev20250703.dist-info/METADATA,sha256=cdLrpjGYff1T2vXfn3iDEoODJiWUgdSWHVOXRauR7OM,18908
|
483
|
+
skypilot_nightly-1.0.0.dev20250703.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
484
|
+
skypilot_nightly-1.0.0.dev20250703.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
|
485
|
+
skypilot_nightly-1.0.0.dev20250703.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
|
486
|
+
skypilot_nightly-1.0.0.dev20250703.dist-info/RECORD,,
|