skypilot-nightly 1.0.0.dev20250729__py3-none-any.whl → 1.0.0.dev20250731__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (186) hide show
  1. sky/__init__.py +2 -2
  2. sky/backends/backend_utils.py +4 -1
  3. sky/backends/cloud_vm_ray_backend.py +4 -3
  4. sky/catalog/__init__.py +3 -3
  5. sky/catalog/aws_catalog.py +12 -0
  6. sky/catalog/common.py +2 -2
  7. sky/catalog/data_fetchers/fetch_aws.py +13 -1
  8. sky/client/cli/command.py +448 -60
  9. sky/client/common.py +12 -9
  10. sky/clouds/nebius.py +1 -1
  11. sky/clouds/utils/gcp_utils.py +1 -1
  12. sky/clouds/vast.py +1 -2
  13. sky/dashboard/out/404.html +1 -1
  14. sky/dashboard/out/_next/static/chunks/1043-928582d4860fef92.js +1 -0
  15. sky/dashboard/out/_next/static/chunks/1141-3f10a5a9f697c630.js +11 -0
  16. sky/dashboard/out/_next/static/chunks/1559-6c00e20454194859.js +30 -0
  17. sky/dashboard/out/_next/static/chunks/1664-22b00e32c9ff96a4.js +1 -0
  18. sky/dashboard/out/_next/static/chunks/1871-1df8b686a51f3e3a.js +6 -0
  19. sky/dashboard/out/_next/static/chunks/2003.f90b06bb1f914295.js +1 -0
  20. sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +1 -0
  21. sky/dashboard/out/_next/static/chunks/2369.fc20f0c2c8ed9fe7.js +15 -0
  22. sky/dashboard/out/_next/static/chunks/2641.142718b6b78a6f9b.js +1 -0
  23. sky/dashboard/out/_next/static/chunks/3698-7874720877646365.js +1 -0
  24. sky/dashboard/out/_next/static/chunks/3785.95524bc443db8260.js +1 -0
  25. sky/dashboard/out/_next/static/chunks/3937.210053269f121201.js +1 -0
  26. sky/dashboard/out/_next/static/chunks/4725.42f21f250f91f65b.js +1 -0
  27. sky/dashboard/out/_next/static/chunks/4869.18e6a4361a380763.js +16 -0
  28. sky/dashboard/out/_next/static/chunks/4937.d6bf67771e353356.js +15 -0
  29. sky/dashboard/out/_next/static/chunks/5230-f3bb2663e442e86c.js +1 -0
  30. sky/dashboard/out/_next/static/chunks/5739-d67458fcb1386c92.js +8 -0
  31. sky/dashboard/out/_next/static/chunks/6135-d0e285ac5f3f2485.js +1 -0
  32. sky/dashboard/out/_next/static/chunks/616-3d59f75e2ccf9321.js +39 -0
  33. sky/dashboard/out/_next/static/chunks/6212-7bd06f60ba693125.js +13 -0
  34. sky/dashboard/out/_next/static/chunks/6601-234b1cf963c7280b.js +1 -0
  35. sky/dashboard/out/_next/static/chunks/691.6d99cbfba347cebf.js +55 -0
  36. sky/dashboard/out/_next/static/chunks/6989-983d3ae7a874de98.js +1 -0
  37. sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +1 -0
  38. sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js +41 -0
  39. sky/dashboard/out/_next/static/chunks/8969-9a8cca241b30db83.js +1 -0
  40. sky/dashboard/out/_next/static/chunks/9025.7937c16bc8623516.js +6 -0
  41. sky/dashboard/out/_next/static/chunks/938-40d15b6261ec8dc1.js +1 -0
  42. sky/dashboard/out/_next/static/chunks/9847.4c46c5e229c78704.js +30 -0
  43. sky/dashboard/out/_next/static/chunks/9984.78ee6d2c6fa4b0e8.js +1 -0
  44. sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js +1 -0
  45. sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js +33 -0
  46. sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js +1 -0
  47. sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js +1 -0
  48. sky/dashboard/out/_next/static/chunks/pages/_app-a67ae198457b9886.js +34 -0
  49. sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +1 -0
  50. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-fa63e8b1d203f298.js +11 -0
  51. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-665fa5d96dd41d67.js +1 -0
  52. sky/dashboard/out/_next/static/chunks/pages/clusters-956ad430075efee8.js +1 -0
  53. sky/dashboard/out/_next/static/chunks/pages/config-8620d099cbef8608.js +1 -0
  54. sky/dashboard/out/_next/static/chunks/pages/index-444f1804401f04ea.js +1 -0
  55. sky/dashboard/out/_next/static/chunks/pages/infra/[context]-9cfd875eecb6eaf5.js +1 -0
  56. sky/dashboard/out/_next/static/chunks/pages/infra-0fbdc9072f19fbe2.js +1 -0
  57. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-b25c109d6e41bcf4.js +11 -0
  58. sky/dashboard/out/_next/static/chunks/pages/jobs-6393a9edc7322b54.js +1 -0
  59. sky/dashboard/out/_next/static/chunks/pages/users-34d6bb10c3b3ee3d.js +1 -0
  60. sky/dashboard/out/_next/static/chunks/pages/volumes-225c8dae0634eb7f.js +1 -0
  61. sky/dashboard/out/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js +1 -0
  62. sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-4d41c9023287f59a.js +1 -0
  63. sky/dashboard/out/_next/static/chunks/pages/workspaces-e4cb7e97d37e93ad.js +1 -0
  64. sky/dashboard/out/_next/static/chunks/webpack-5adfc4d4b3db6f71.js +1 -0
  65. sky/dashboard/out/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js +1 -0
  66. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  67. sky/dashboard/out/clusters/[cluster].html +1 -1
  68. sky/dashboard/out/clusters.html +1 -1
  69. sky/dashboard/out/config.html +1 -1
  70. sky/dashboard/out/index.html +1 -1
  71. sky/dashboard/out/infra/[context].html +1 -1
  72. sky/dashboard/out/infra.html +1 -1
  73. sky/dashboard/out/jobs/[job].html +1 -1
  74. sky/dashboard/out/jobs.html +1 -1
  75. sky/dashboard/out/users.html +1 -1
  76. sky/dashboard/out/volumes.html +1 -1
  77. sky/dashboard/out/workspace/new.html +1 -1
  78. sky/dashboard/out/workspaces/[name].html +1 -1
  79. sky/dashboard/out/workspaces.html +1 -1
  80. sky/data/data_utils.py +25 -0
  81. sky/data/storage.py +1219 -1775
  82. sky/global_user_state.py +18 -8
  83. sky/jobs/__init__.py +3 -0
  84. sky/jobs/client/sdk.py +80 -3
  85. sky/jobs/controller.py +76 -25
  86. sky/jobs/recovery_strategy.py +80 -34
  87. sky/jobs/scheduler.py +68 -20
  88. sky/jobs/server/core.py +228 -136
  89. sky/jobs/server/server.py +40 -0
  90. sky/jobs/state.py +164 -31
  91. sky/jobs/utils.py +144 -68
  92. sky/logs/aws.py +4 -2
  93. sky/provision/kubernetes/utils.py +6 -4
  94. sky/provision/nebius/constants.py +3 -0
  95. sky/provision/vast/instance.py +2 -1
  96. sky/provision/vast/utils.py +9 -6
  97. sky/py.typed +0 -0
  98. sky/resources.py +24 -14
  99. sky/schemas/db/spot_jobs/002_cluster_pool.py +42 -0
  100. sky/serve/autoscalers.py +8 -0
  101. sky/serve/client/impl.py +188 -0
  102. sky/serve/client/sdk.py +12 -82
  103. sky/serve/constants.py +5 -1
  104. sky/serve/controller.py +5 -0
  105. sky/serve/replica_managers.py +112 -37
  106. sky/serve/serve_state.py +16 -6
  107. sky/serve/serve_utils.py +274 -77
  108. sky/serve/server/core.py +8 -525
  109. sky/serve/server/impl.py +709 -0
  110. sky/serve/service.py +13 -9
  111. sky/serve/service_spec.py +74 -4
  112. sky/server/constants.py +1 -1
  113. sky/server/requests/payloads.py +33 -0
  114. sky/server/requests/requests.py +18 -1
  115. sky/server/requests/serializers/decoders.py +12 -3
  116. sky/server/requests/serializers/encoders.py +13 -2
  117. sky/server/server.py +6 -1
  118. sky/skylet/events.py +9 -0
  119. sky/skypilot_config.py +24 -21
  120. sky/task.py +41 -11
  121. sky/templates/jobs-controller.yaml.j2 +3 -0
  122. sky/templates/sky-serve-controller.yaml.j2 +18 -2
  123. sky/users/server.py +1 -1
  124. sky/utils/command_runner.py +4 -2
  125. sky/utils/controller_utils.py +14 -10
  126. sky/utils/dag_utils.py +4 -2
  127. sky/utils/db/migration_utils.py +2 -4
  128. sky/utils/schemas.py +24 -19
  129. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/METADATA +1 -1
  130. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/RECORD +135 -130
  131. sky/dashboard/out/_next/static/Q2sVXboB_t7cgvntL-6nD/_buildManifest.js +0 -1
  132. sky/dashboard/out/_next/static/chunks/1043-869d9c78bf5dd3df.js +0 -1
  133. sky/dashboard/out/_next/static/chunks/1141-e49a159c30a6c4a7.js +0 -11
  134. sky/dashboard/out/_next/static/chunks/1559-18717d96ef2fcbe9.js +0 -30
  135. sky/dashboard/out/_next/static/chunks/1664-d65361e92b85e786.js +0 -1
  136. sky/dashboard/out/_next/static/chunks/1871-ea0e7283886407ca.js +0 -6
  137. sky/dashboard/out/_next/static/chunks/2003.b82e6db40ec4c463.js +0 -1
  138. sky/dashboard/out/_next/static/chunks/2350.23778a2b19aabd33.js +0 -1
  139. sky/dashboard/out/_next/static/chunks/2369.2d6e4757f8dfc2b7.js +0 -15
  140. sky/dashboard/out/_next/static/chunks/2641.74c19c4d45a2c034.js +0 -1
  141. sky/dashboard/out/_next/static/chunks/3698-9fa11dafb5cad4a6.js +0 -1
  142. sky/dashboard/out/_next/static/chunks/3785.59705416215ff08b.js +0 -1
  143. sky/dashboard/out/_next/static/chunks/3937.d7f1c55d1916c7f2.js +0 -1
  144. sky/dashboard/out/_next/static/chunks/4725.66125dcd9832aa5d.js +0 -1
  145. sky/dashboard/out/_next/static/chunks/4869.da729a7db3a31f43.js +0 -16
  146. sky/dashboard/out/_next/static/chunks/4937.d75809403fc264ac.js +0 -15
  147. sky/dashboard/out/_next/static/chunks/5230-df791914b54d91d9.js +0 -1
  148. sky/dashboard/out/_next/static/chunks/5739-5ea3ffa10fc884f2.js +0 -8
  149. sky/dashboard/out/_next/static/chunks/6135-2abbd0352f8ee061.js +0 -1
  150. sky/dashboard/out/_next/static/chunks/616-162f3033ffcd3d31.js +0 -39
  151. sky/dashboard/out/_next/static/chunks/6601-d4a381403a8bae91.js +0 -1
  152. sky/dashboard/out/_next/static/chunks/691.488b4aef97c28727.js +0 -55
  153. sky/dashboard/out/_next/static/chunks/6989-eab0e9c16b64fd9f.js +0 -1
  154. sky/dashboard/out/_next/static/chunks/6990-f64e03df359e04f7.js +0 -1
  155. sky/dashboard/out/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js +0 -41
  156. sky/dashboard/out/_next/static/chunks/8969-8e0b2055bf5dd499.js +0 -1
  157. sky/dashboard/out/_next/static/chunks/9025.4a9099bdf3ed4875.js +0 -6
  158. sky/dashboard/out/_next/static/chunks/938-7ee806653aef0609.js +0 -1
  159. sky/dashboard/out/_next/static/chunks/9847.387abf8a14d722db.js +0 -30
  160. sky/dashboard/out/_next/static/chunks/9984.0460de9d3adf5582.js +0 -1
  161. sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js +0 -1
  162. sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js +0 -33
  163. sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js +0 -1
  164. sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js +0 -1
  165. sky/dashboard/out/_next/static/chunks/pages/_app-da491665d4289aae.js +0 -34
  166. sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js +0 -1
  167. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-2186770cc2de1623.js +0 -11
  168. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-95afb019ab85801c.js +0 -6
  169. sky/dashboard/out/_next/static/chunks/pages/clusters-3d4be4961e1c94eb.js +0 -1
  170. sky/dashboard/out/_next/static/chunks/pages/config-a2673b256b6d416f.js +0 -1
  171. sky/dashboard/out/_next/static/chunks/pages/index-89e7daf7b7df02e0.js +0 -1
  172. sky/dashboard/out/_next/static/chunks/pages/infra/[context]-a90b4fe4616dc501.js +0 -1
  173. sky/dashboard/out/_next/static/chunks/pages/infra-0d3d1f890c5d188a.js +0 -1
  174. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-dc0299ffefebcdbe.js +0 -16
  175. sky/dashboard/out/_next/static/chunks/pages/jobs-49f790d12a85027c.js +0 -1
  176. sky/dashboard/out/_next/static/chunks/pages/users-6790fcefd5487b13.js +0 -1
  177. sky/dashboard/out/_next/static/chunks/pages/volumes-61ea7ba7e56f8d06.js +0 -1
  178. sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js +0 -1
  179. sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-6bcd4b20914d76c9.js +0 -1
  180. sky/dashboard/out/_next/static/chunks/pages/workspaces-5f7fe4b7d55b8612.js +0 -1
  181. sky/dashboard/out/_next/static/chunks/webpack-a305898dc479711e.js +0 -1
  182. /sky/dashboard/out/_next/static/{Q2sVXboB_t7cgvntL-6nD → oKqDxFQ88cquF4nQGE_0w}/_ssgManifest.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/WHEEL +0 -0
  184. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/entry_points.txt +0 -0
  185. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/licenses/LICENSE +0 -0
  186. {skypilot_nightly-1.0.0.dev20250729.dist-info → skypilot_nightly-1.0.0.dev20250731.dist-info}/top_level.txt +0 -0
@@ -201,6 +201,7 @@ class CommandRunner:
201
201
  separate_stderr: bool,
202
202
  skip_num_lines: int,
203
203
  source_bashrc: bool = False,
204
+ use_login: bool = True,
204
205
  ) -> str:
205
206
  """Returns the command to run."""
206
207
  if isinstance(cmd, list):
@@ -211,7 +212,7 @@ class CommandRunner:
211
212
  '/bin/bash',
212
213
  '--login',
213
214
  '-c',
214
- ]
215
+ ] if use_login else ['/bin/bash', '-c']
215
216
  if source_bashrc:
216
217
  command += [
217
218
  # Need this `-i` option to make sure `source ~/.bashrc` work.
@@ -1124,7 +1125,8 @@ class LocalProcessCommandRunner(CommandRunner):
1124
1125
  process_stream,
1125
1126
  separate_stderr,
1126
1127
  skip_num_lines=skip_num_lines,
1127
- source_bashrc=source_bashrc)
1128
+ source_bashrc=source_bashrc,
1129
+ use_login=False)
1128
1130
 
1129
1131
  log_dir = os.path.expanduser(os.path.dirname(log_path))
1130
1132
  os.makedirs(log_dir, exist_ok=True)
@@ -5,7 +5,7 @@ import enum
5
5
  import os
6
6
  import tempfile
7
7
  import typing
8
- from typing import Any, Dict, Iterable, List, Optional, Set
8
+ from typing import Any, Callable, Dict, Iterable, List, Optional, Set
9
9
  import uuid
10
10
 
11
11
  import colorama
@@ -64,7 +64,7 @@ class _ControllerSpec:
64
64
  controller_type: str
65
65
  name: str
66
66
  cluster_name: str
67
- in_progress_hint: str
67
+ in_progress_hint: Callable[[bool], str]
68
68
  decline_cancel_hint: str
69
69
  _decline_down_when_failed_to_fetch_status_hint: str
70
70
  decline_down_for_dirty_controller_hint: str
@@ -94,9 +94,9 @@ class Controllers(enum.Enum):
94
94
  controller_type='jobs',
95
95
  name='managed jobs controller',
96
96
  cluster_name=common.JOB_CONTROLLER_NAME,
97
- in_progress_hint=(
98
- '* {job_info}To see all managed jobs: '
99
- f'{colorama.Style.BRIGHT}sky jobs queue{colorama.Style.RESET_ALL}'),
97
+ in_progress_hint=lambda _:
98
+ ('* {job_info}To see all managed jobs: '
99
+ f'{colorama.Style.BRIGHT}sky jobs queue{colorama.Style.RESET_ALL}'),
100
100
  decline_cancel_hint=(
101
101
  'Cancelling the jobs controller\'s jobs is not allowed.\nTo cancel '
102
102
  f'managed jobs, use: {colorama.Style.BRIGHT}sky jobs cancel '
@@ -126,8 +126,11 @@ class Controllers(enum.Enum):
126
126
  name='serve controller',
127
127
  cluster_name=common.SKY_SERVE_CONTROLLER_NAME,
128
128
  in_progress_hint=(
129
- f'* To see detailed service status: {colorama.Style.BRIGHT}'
130
- f'sky serve status -v{colorama.Style.RESET_ALL}'),
129
+ lambda pool:
130
+ (f'* To see detailed pool status: {colorama.Style.BRIGHT}'
131
+ f'sky jobs pool status -v{colorama.Style.RESET_ALL}') if pool else
132
+ (f'* To see detailed service status: {colorama.Style.BRIGHT}'
133
+ f'sky serve status -v{colorama.Style.RESET_ALL}')),
131
134
  decline_cancel_hint=(
132
135
  'Cancelling the sky serve controller\'s jobs is not allowed.'),
133
136
  _decline_down_when_failed_to_fetch_status_hint=(
@@ -391,10 +394,11 @@ def check_cluster_name_not_controller(
391
394
 
392
395
 
393
396
  # Internal only:
394
- def download_and_stream_latest_job_log(
397
+ def download_and_stream_job_log(
395
398
  backend: 'cloud_vm_ray_backend.CloudVmRayBackend',
396
399
  handle: 'cloud_vm_ray_backend.CloudVmRayResourceHandle',
397
- local_dir: str) -> Optional[str]:
400
+ local_dir: str,
401
+ job_ids: Optional[List[str]] = None) -> Optional[str]:
398
402
  """Downloads and streams the latest job log.
399
403
 
400
404
  This function is only used by jobs controller and sky serve controller.
@@ -412,7 +416,7 @@ def download_and_stream_latest_job_log(
412
416
  # multi-node cluster is preempted, and we recover the managed job
413
417
  # on the existing cluster, which leads to a larger job_id. Those
414
418
  # job_ids all represent the same logical managed job.
415
- job_ids=None,
419
+ job_ids=job_ids,
416
420
  local_dir=local_dir)
417
421
  except Exception as e: # pylint: disable=broad-except
418
422
  # We want to avoid crashing the controller. sync_down_logs() is pretty
sky/utils/dag_utils.py CHANGED
@@ -148,7 +148,7 @@ def load_chain_dag_from_yaml_str(
148
148
 
149
149
 
150
150
  def dump_chain_dag_to_yaml_str(dag: dag_lib.Dag,
151
- redact_secrets: bool = False) -> str:
151
+ use_user_specified_yaml: bool = False) -> str:
152
152
  """Dumps a chain DAG to a YAML string.
153
153
 
154
154
  Args:
@@ -161,7 +161,9 @@ def dump_chain_dag_to_yaml_str(dag: dag_lib.Dag,
161
161
  assert dag.is_chain(), dag
162
162
  configs = [{'name': dag.name}]
163
163
  for task in dag.tasks:
164
- configs.append(task.to_yaml_config(redact_secrets=redact_secrets))
164
+ configs.append(
165
+ task.to_yaml_config(
166
+ use_user_specified_yaml=use_user_specified_yaml))
165
167
  return common_utils.dump_yaml_str(configs)
166
168
 
167
169
 
@@ -12,7 +12,6 @@ import filelock
12
12
  import sqlalchemy
13
13
 
14
14
  from sky import sky_logging
15
- from sky import skypilot_config
16
15
  from sky.skylet import constants
17
16
 
18
17
  logger = sky_logging.init_logger(__name__)
@@ -24,16 +23,15 @@ GLOBAL_USER_STATE_VERSION = '001'
24
23
  GLOBAL_USER_STATE_LOCK_PATH = '~/.sky/locks/.state_db.lock'
25
24
 
26
25
  SPOT_JOBS_DB_NAME = 'spot_jobs_db'
27
- SPOT_JOBS_VERSION = '001'
26
+ SPOT_JOBS_VERSION = '002'
28
27
  SPOT_JOBS_LOCK_PATH = '~/.sky/locks/.spot_jobs_db.lock'
29
28
 
30
29
 
31
30
  def get_engine(db_name: str):
32
31
  conn_string = None
33
32
  if os.environ.get(constants.ENV_VAR_IS_SKYPILOT_SERVER) is not None:
34
- conn_string = skypilot_config.get_nested(('db',), None)
33
+ conn_string = os.environ.get(constants.ENV_VAR_DB_CONNECTION_URI)
35
34
  if conn_string:
36
- logger.debug(f'using db URI from {conn_string}')
37
35
  engine = sqlalchemy.create_engine(conn_string,
38
36
  poolclass=sqlalchemy.NullPool)
39
37
  else:
sky/utils/schemas.py CHANGED
@@ -605,7 +605,6 @@ def get_service_schema():
605
605
  return {
606
606
  '$schema': 'https://json-schema.org/draft/2020-12/schema',
607
607
  'type': 'object',
608
- 'required': ['readiness_probe'],
609
608
  'additionalProperties': False,
610
609
  'properties': {
611
610
  'readiness_probe': {
@@ -641,6 +640,9 @@ def get_service_schema():
641
640
  }
642
641
  }]
643
642
  },
643
+ 'pool': {
644
+ 'type': 'boolean',
645
+ },
644
646
  'replica_policy': {
645
647
  'type': 'object',
646
648
  'required': ['min_replicas'],
@@ -688,6 +690,9 @@ def get_service_schema():
688
690
  'replicas': {
689
691
  'type': 'integer',
690
692
  },
693
+ 'workers': {
694
+ 'type': 'integer',
695
+ },
691
696
  'load_balancing_policy': {
692
697
  'type': 'string',
693
698
  'case_insensitive_enum': list(
@@ -825,6 +830,9 @@ def get_task_schema():
825
830
  'service': {
826
831
  'type': 'object',
827
832
  },
833
+ 'pool': {
834
+ 'type': 'object',
835
+ },
828
836
  'setup': {
829
837
  'type': 'string',
830
838
  },
@@ -1137,21 +1145,7 @@ def get_config_schema():
1137
1145
  }
1138
1146
  resources_schema['properties'].pop('ports')
1139
1147
 
1140
- def _get_controller_schema(add_consolidation_mode: bool = False):
1141
- controller_properties = {
1142
- 'resources': resources_schema,
1143
- 'high_availability': {
1144
- 'type': 'boolean',
1145
- 'default': False,
1146
- },
1147
- 'autostop': _AUTOSTOP_SCHEMA,
1148
- }
1149
- if add_consolidation_mode:
1150
- controller_properties['consolidation_mode'] = {
1151
- 'type': 'boolean',
1152
- 'default': False,
1153
- }
1154
-
1148
+ def _get_controller_schema():
1155
1149
  return {
1156
1150
  'type': 'object',
1157
1151
  'required': [],
@@ -1161,7 +1155,18 @@ def get_config_schema():
1161
1155
  'type': 'object',
1162
1156
  'required': [],
1163
1157
  'additionalProperties': False,
1164
- 'properties': controller_properties,
1158
+ 'properties': {
1159
+ 'resources': resources_schema,
1160
+ 'high_availability': {
1161
+ 'type': 'boolean',
1162
+ 'default': False,
1163
+ },
1164
+ 'autostop': _AUTOSTOP_SCHEMA,
1165
+ 'consolidation_mode': {
1166
+ 'type': 'boolean',
1167
+ 'default': False,
1168
+ }
1169
+ },
1165
1170
  },
1166
1171
  'bucket': {
1167
1172
  'type': 'string',
@@ -1707,8 +1712,8 @@ def get_config_schema():
1707
1712
  'db': {
1708
1713
  'type': 'string',
1709
1714
  },
1710
- 'jobs': _get_controller_schema(add_consolidation_mode=True),
1711
- 'serve': _get_controller_schema(add_consolidation_mode=False),
1715
+ 'jobs': _get_controller_schema(),
1716
+ 'serve': _get_controller_schema(),
1712
1717
  'allowed_clouds': allowed_clouds,
1713
1718
  'admin_policy': admin_policy_schema,
1714
1719
  'docker': docker_configs,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250729
3
+ Version: 1.0.0.dev20250731
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0