dstack 0.19.13__py3-none-any.whl → 0.19.15rc1__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 dstack might be problematic. Click here for more details.

Files changed (35) hide show
  1. dstack/_internal/cli/commands/attach.py +4 -4
  2. dstack/_internal/cli/services/configurators/run.py +1 -0
  3. dstack/_internal/cli/utils/run.py +16 -4
  4. dstack/_internal/core/compatibility/runs.py +6 -0
  5. dstack/_internal/core/models/projects.py +1 -0
  6. dstack/_internal/core/models/runs.py +23 -1
  7. dstack/_internal/server/app.py +45 -0
  8. dstack/_internal/server/background/tasks/process_running_jobs.py +45 -3
  9. dstack/_internal/server/background/tasks/process_runs.py +149 -79
  10. dstack/_internal/server/migrations/versions/35e90e1b0d3e_add_rolling_deployment_fields.py +42 -0
  11. dstack/_internal/server/migrations/versions/35f732ee4cf5_add_projectmodel_is_public.py +39 -0
  12. dstack/_internal/server/models.py +4 -0
  13. dstack/_internal/server/routers/projects.py +4 -3
  14. dstack/_internal/server/routers/prometheus.py +4 -1
  15. dstack/_internal/server/schemas/projects.py +1 -0
  16. dstack/_internal/server/security/permissions.py +36 -0
  17. dstack/_internal/server/services/jobs/__init__.py +1 -0
  18. dstack/_internal/server/services/jobs/configurators/base.py +11 -7
  19. dstack/_internal/server/services/projects.py +54 -1
  20. dstack/_internal/server/services/runs.py +49 -29
  21. dstack/_internal/server/services/services/__init__.py +19 -0
  22. dstack/_internal/server/services/services/autoscalers.py +37 -26
  23. dstack/_internal/server/statics/index.html +1 -1
  24. dstack/_internal/server/statics/{main-2066f1f22ddb4557bcde.js → main-0ac1e1583684417ae4d1.js} +26 -24
  25. dstack/_internal/server/statics/{main-2066f1f22ddb4557bcde.js.map → main-0ac1e1583684417ae4d1.js.map} +1 -1
  26. dstack/_internal/server/testing/common.py +9 -0
  27. dstack/_internal/settings.py +3 -0
  28. dstack/api/_public/runs.py +14 -5
  29. dstack/api/server/_projects.py +2 -2
  30. dstack/version.py +3 -2
  31. {dstack-0.19.13.dist-info → dstack-0.19.15rc1.dist-info}/METADATA +1 -1
  32. {dstack-0.19.13.dist-info → dstack-0.19.15rc1.dist-info}/RECORD +35 -33
  33. {dstack-0.19.13.dist-info → dstack-0.19.15rc1.dist-info}/WHEEL +0 -0
  34. {dstack-0.19.13.dist-info → dstack-0.19.15rc1.dist-info}/entry_points.txt +0 -0
  35. {dstack-0.19.13.dist-info → dstack-0.19.15rc1.dist-info}/licenses/LICENSE.md +0 -0
@@ -140,6 +140,7 @@ async def create_project(
140
140
  created_at: datetime = datetime(2023, 1, 2, 3, 4, tzinfo=timezone.utc),
141
141
  ssh_private_key: str = "",
142
142
  ssh_public_key: str = "",
143
+ is_public: bool = False,
143
144
  ) -> ProjectModel:
144
145
  if owner is None:
145
146
  owner = await create_user(session=session, name="test_owner")
@@ -149,6 +150,7 @@ async def create_project(
149
150
  created_at=created_at,
150
151
  ssh_private_key=ssh_private_key,
151
152
  ssh_public_key=ssh_public_key,
153
+ is_public=is_public,
152
154
  )
153
155
  session.add(project)
154
156
  await session.commit()
@@ -263,6 +265,7 @@ async def create_run(
263
265
  run_id: Optional[UUID] = None,
264
266
  deleted: bool = False,
265
267
  priority: int = 0,
268
+ deployment_num: int = 0,
266
269
  ) -> RunModel:
267
270
  if run_spec is None:
268
271
  run_spec = get_run_spec(
@@ -284,6 +287,8 @@ async def create_run(
284
287
  last_processed_at=submitted_at,
285
288
  jobs=[],
286
289
  priority=priority,
290
+ deployment_num=deployment_num,
291
+ desired_replica_count=1,
287
292
  )
288
293
  session.add(run)
289
294
  await session.commit()
@@ -303,9 +308,12 @@ async def create_job(
303
308
  instance: Optional[InstanceModel] = None,
304
309
  job_num: int = 0,
305
310
  replica_num: int = 0,
311
+ deployment_num: Optional[int] = None,
306
312
  instance_assigned: bool = False,
307
313
  disconnected_at: Optional[datetime] = None,
308
314
  ) -> JobModel:
315
+ if deployment_num is None:
316
+ deployment_num = run.deployment_num
309
317
  run_spec = RunSpec.parse_raw(run.run_spec)
310
318
  job_spec = (await get_job_specs_from_run_spec(run_spec, replica_num=replica_num))[0]
311
319
  job_spec.job_num = job_num
@@ -316,6 +324,7 @@ async def create_job(
316
324
  job_num=job_num,
317
325
  job_name=run.run_name + f"-{job_num}-{replica_num}",
318
326
  replica_num=replica_num,
327
+ deployment_num=deployment_num,
319
328
  submission_num=submission_num,
320
329
  submitted_at=submitted_at,
321
330
  last_processed_at=last_processed_at,
@@ -14,6 +14,9 @@ DSTACK_USE_LATEST_FROM_BRANCH = os.getenv("DSTACK_USE_LATEST_FROM_BRANCH") is no
14
14
 
15
15
  DSTACK_BASE_IMAGE = os.getenv("DSTACK_BASE_IMAGE", "dstackai/base")
16
16
  DSTACK_BASE_IMAGE_VERSION = os.getenv("DSTACK_BASE_IMAGE_VERSION", version.base_image)
17
+ DSTACK_BASE_IMAGE_UBUNTU_VERSION = os.getenv(
18
+ "DSTACK_BASE_IMAGE_UBUNTU_VERSION", version.base_image_ubuntu_version
19
+ )
17
20
 
18
21
 
19
22
  class FeatureFlags:
@@ -31,6 +31,7 @@ from dstack._internal.core.models.resources import ResourcesSpec
31
31
  from dstack._internal.core.models.runs import (
32
32
  Job,
33
33
  JobSpec,
34
+ JobStatus,
34
35
  RunPlan,
35
36
  RunSpec,
36
37
  RunStatus,
@@ -184,7 +185,7 @@ class Run(ABC):
184
185
  self,
185
186
  start_time: Optional[datetime] = None,
186
187
  diagnose: bool = False,
187
- replica_num: int = 0,
188
+ replica_num: Optional[int] = None,
188
189
  job_num: int = 0,
189
190
  ) -> Iterable[bytes]:
190
191
  """
@@ -246,7 +247,7 @@ class Run(ABC):
246
247
  ssh_identity_file: Optional[PathLike] = None,
247
248
  bind_address: Optional[str] = None,
248
249
  ports_overrides: Optional[List[PortMapping]] = None,
249
- replica_num: int = 0,
250
+ replica_num: Optional[int] = None,
250
251
  job_num: int = 0,
251
252
  ) -> bool:
252
253
  """
@@ -254,6 +255,7 @@ class Run(ABC):
254
255
 
255
256
  Args:
256
257
  ssh_identity_file: SSH keypair to access instances.
258
+ replica_num: replica_num or None to attach to any running replica.
257
259
 
258
260
  Raises:
259
261
  dstack.api.PortUsedError: If ports are in use or the run is attached by another process.
@@ -265,7 +267,9 @@ class Run(ABC):
265
267
 
266
268
  job = self._find_job(replica_num=replica_num, job_num=job_num)
267
269
  if job is None:
268
- raise ClientError(f"Failed to find replica={replica_num} job={job_num}")
270
+ replica_repr = replica_num if replica_num is not None else "<any running>"
271
+ raise ClientError(f"Failed to find replica={replica_repr} job={job_num}")
272
+ replica_num = job.job_spec.replica_num
269
273
 
270
274
  name = self.name
271
275
  if replica_num != 0 or job_num != 0:
@@ -358,9 +362,14 @@ class Run(ABC):
358
362
  self._ssh_attach.detach()
359
363
  self._ssh_attach = None
360
364
 
361
- def _find_job(self, replica_num: int, job_num: int) -> Optional[Job]:
365
+ def _find_job(self, replica_num: Optional[int], job_num: int) -> Optional[Job]:
362
366
  for j in self._run.jobs:
363
- if j.job_spec.replica_num == replica_num and j.job_spec.job_num == job_num:
367
+ if (
368
+ replica_num is not None
369
+ and j.job_spec.replica_num == replica_num
370
+ or replica_num is None
371
+ and j.job_submissions[-1].status == JobStatus.RUNNING
372
+ ) and j.job_spec.job_num == job_num:
364
373
  return j
365
374
  return None
366
375
 
@@ -17,8 +17,8 @@ class ProjectsAPIClient(APIClientGroup):
17
17
  resp = self._request("/api/projects/list")
18
18
  return parse_obj_as(List[Project.__response__], resp.json())
19
19
 
20
- def create(self, project_name: str) -> Project:
21
- body = CreateProjectRequest(project_name=project_name)
20
+ def create(self, project_name: str, is_public: bool = False) -> Project:
21
+ body = CreateProjectRequest(project_name=project_name, is_public=is_public)
22
22
  resp = self._request("/api/projects/create", body=body.json())
23
23
  return parse_obj_as(Project.__response__, resp.json())
24
24
 
dstack/version.py CHANGED
@@ -1,3 +1,4 @@
1
- __version__ = "0.19.13"
1
+ __version__ = "0.19.15rc1"
2
2
  __is_release__ = True
3
- base_image = "0.9"
3
+ base_image = "0.10"
4
+ base_image_ubuntu_version = "22.04"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dstack
3
- Version: 0.19.13
3
+ Version: 0.19.15rc1
4
4
  Summary: dstack is an open-source orchestration engine for running AI workloads on any cloud or on-premises.
5
5
  Project-URL: Homepage, https://dstack.ai
6
6
  Project-URL: Source, https://github.com/dstackai/dstack
@@ -1,13 +1,13 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=OwNbB8gHGF6BM_ok6ibCM0DP4eAejg2QWX9OL07NlV0,65
2
+ dstack/version.py,sha256=FyZR2pNzdnR7Z385j--i8IZGCkQWzBIhLuPjA-KcwbA,105
3
3
  dstack/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  dstack/_internal/compat.py,sha256=bF9U9fTMfL8UVhCouedoUSTYFl7UAOiU0WXrnRoByxw,40
5
- dstack/_internal/settings.py,sha256=GOqfcLEONWC1hGU36IYPuOhJXP_qC3Y6d2SQge_NdpY,953
5
+ dstack/_internal/settings.py,sha256=aB4wf5_ISiTQILZYky2VtAy0BvAP_yD0TxaHxuzYmBA,1075
6
6
  dstack/_internal/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  dstack/_internal/cli/main.py,sha256=cuOcaRxeWxO7zYM9dFRe5uc6U_RxEFjzS5sd4-8KkFA,3798
8
8
  dstack/_internal/cli/commands/__init__.py,sha256=e8EjD8Ej7Q3_APlxAN7NBwY7dGnW-DR91nH_RgcjBXg,2023
9
9
  dstack/_internal/cli/commands/apply.py,sha256=dZH2B3Yr-lB7hs-QeUnvX0FV0Yk2x19dEO5uSFo4098,4909
10
- dstack/_internal/cli/commands/attach.py,sha256=3by0imi2Wj2vUjvanPw97XUvDYxSj01YXYrrjrjNseE,5070
10
+ dstack/_internal/cli/commands/attach.py,sha256=AfB7ITXJ59fCzCUwdC6nNDsiAOkAQlLQQyxFxwHdtu8,5118
11
11
  dstack/_internal/cli/commands/completion.py,sha256=2gDBYNb9u1JtuvZaAzqEOy0_ZatBvwn0Aq10j138xnA,546
12
12
  dstack/_internal/cli/commands/config.py,sha256=cpNCVCklQDW4vcdD9ovtJs6bcDIM1dULOZ6PKx3D39o,3148
13
13
  dstack/_internal/cli/commands/delete.py,sha256=agFBwJg8JXy1xp1UplRFLEPbix1bKvt6XvSBKpSPwYI,1418
@@ -32,14 +32,14 @@ dstack/_internal/cli/services/configurators/__init__.py,sha256=z94VPBFqybP8Zpwy3
32
32
  dstack/_internal/cli/services/configurators/base.py,sha256=bGfde2zoma28lLE8MUACO4-NKT1CdJJQJoXrzjpz0mQ,3360
33
33
  dstack/_internal/cli/services/configurators/fleet.py,sha256=jm4tNH6QQVplLdboCTlvRYUee3nZ0UYb_qLTrvtYVYM,14049
34
34
  dstack/_internal/cli/services/configurators/gateway.py,sha256=czB2s89s7IowOmWnpDwWErPAUlW3FvFMizImhrkQiBM,8927
35
- dstack/_internal/cli/services/configurators/run.py,sha256=Dapy7YkwH88veiyYuhNg5PzJ0ubCOsrwIWgBaC8XcJ0,25056
35
+ dstack/_internal/cli/services/configurators/run.py,sha256=7DVTUa69Fhr96AE_y2JXXpea4VQaDZ5c40pB2u_MBGc,25104
36
36
  dstack/_internal/cli/services/configurators/volume.py,sha256=riMXLQbgvHIIFwLKdHfad-_0iE9wE3G_rUmXU5P3ZS8,8519
37
37
  dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  dstack/_internal/cli/utils/common.py,sha256=rfmzqrsgR3rXW3wj0vxDdvrhUUg2aIy4A6E9MZbd55g,1763
39
39
  dstack/_internal/cli/utils/fleet.py,sha256=ch-LN1X9boSm-rFLW4mAJRmz0XliLhH0LvKD2DqSt2g,3942
40
40
  dstack/_internal/cli/utils/gateway.py,sha256=qMYa1NTAT_O98x2_mSyWDRbiHj5fqt6xUXFh9NIUwAM,1502
41
41
  dstack/_internal/cli/utils/rich.py,sha256=Gx1MJU929kMKsbdo9qF7XHARNta2426Ssb-xMLVhwbQ,5710
42
- dstack/_internal/cli/utils/run.py,sha256=g4rOQ6OPfz2dRhuYKfUDJQD9QGWLqBPRTcdxAgsXTYY,8967
42
+ dstack/_internal/cli/utils/run.py,sha256=lpndMpsj7BJvOzHkDyW_O8b9EHy-QZo2idwOosJOZOU,9485
43
43
  dstack/_internal/cli/utils/updates.py,sha256=pGr5keEmHojnbY0ayjWL4GWTz4ParY6fP85tHpJ11pI,3043
44
44
  dstack/_internal/cli/utils/volume.py,sha256=mU9I06dVMFbpjfkefxrZNoSWadKLoib3U14rHudNQN4,1975
45
45
  dstack/_internal/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -156,7 +156,7 @@ dstack/_internal/core/backends/vultr/models.py,sha256=TkqK_lW6w5k_7wsoFiKDb6NXuT
156
156
  dstack/_internal/core/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  dstack/_internal/core/compatibility/fleets.py,sha256=Ndrib4Wtam-az1o2O4unBrSj3MpNwIBfU3Q8uSPNGHc,2674
158
158
  dstack/_internal/core/compatibility/gateways.py,sha256=gMAHSyhStn1ij51efEhEpUCZg7y8FPeppNITUctJqyU,1284
159
- dstack/_internal/core/compatibility/runs.py,sha256=L_vo3vIEJ-8AFyHnHxPlGZPypxVmgyYjO7LNbfoRol0,5647
159
+ dstack/_internal/core/compatibility/runs.py,sha256=6ZgT8Iu6KzBbyoKPWDv5e-cyK7xgWZAZBFGbooGs2oE,6017
160
160
  dstack/_internal/core/compatibility/volumes.py,sha256=WVsnAh3pWEkytFWp9irV4QPfkXCH-rfAUOcye7XDoDs,1252
161
161
  dstack/_internal/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  dstack/_internal/core/models/common.py,sha256=XWd79dmFGMrdpTcStH5fVmNXCKE0s7FsIorPL0saQ8w,2138
@@ -170,9 +170,9 @@ dstack/_internal/core/models/logs.py,sha256=Lsmtd_NrnChMjBJahUZpFb1j8Xobix9FHWf1
170
170
  dstack/_internal/core/models/metrics.py,sha256=Xb8hCXUL-ncQ3PMsErIUAJTe9gwh5jyrQ4UQoZbibsc,269
171
171
  dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7VSAtR_xoFvPVM,720
172
172
  dstack/_internal/core/models/profiles.py,sha256=SSbslQfKoa6Sg8A_Z26xDNTujGZc51we11G5rlqfBpY,11659
173
- dstack/_internal/core/models/projects.py,sha256=H5ZZRiyUEKifpTFAhl45KBi5ly7ooE0WmI329myK360,643
173
+ dstack/_internal/core/models/projects.py,sha256=HmmlrvUSSEjfGfX7X5tmGJ-CbKeyGK6shHD5OghDNks,671
174
174
  dstack/_internal/core/models/resources.py,sha256=rsf6hAhi5bfSb_Z9VcS3UoEG0G8Ohl6ekyrOStLOAqw,14114
175
- dstack/_internal/core/models/runs.py,sha256=q7SZxavNuDippPXfJ_Qd4wWK7kyCrCO456toovwOyKc,22346
175
+ dstack/_internal/core/models/runs.py,sha256=sq3kxtidqKIzNIgauiKoViJVbQ5K6ah6R8JQVoxZVnA,23269
176
176
  dstack/_internal/core/models/secrets.py,sha256=IQyemsNpSzqOCB-VlVTuc4gyPFmXXO4mhko0Ur0ey3I,221
177
177
  dstack/_internal/core/models/server.py,sha256=Hkc1v2s3KOiwslsWVmhUOAzcSeREoG-HD1SzSX9WUGg,152
178
178
  dstack/_internal/core/models/services.py,sha256=2Hpi7j0Q1shaf_0wd0C0044AJAmuYi-D3qx3PH849oI,3076
@@ -252,11 +252,11 @@ dstack/_internal/proxy/lib/testing/auth.py,sha256=-firWTnis9Eogoi58BURv1S-te4Hf9
252
252
  dstack/_internal/proxy/lib/testing/common.py,sha256=5e2VYboMqjBnUxkvidaWLoQ-uaBGh_hnURb_VJc38q4,1518
253
253
  dstack/_internal/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
254
  dstack/_internal/server/alembic.ini,sha256=rTauBJC8Jxlw76KUygW061OFAGV7GhwAStinlaxoYGY,3166
255
- dstack/_internal/server/app.py,sha256=SB2UUorR9OzvWOXBvK4g21kGWZHSu13IdefnnRKrIHQ,11536
255
+ dstack/_internal/server/app.py,sha256=QU6lzOfZslG4C4Fv58P7M3J5xXly94V2ZpfNYsoW09w,13141
256
256
  dstack/_internal/server/db.py,sha256=WjuqmjG3QAZmSMCeUaJ_ynbowlHuNAvYCZO649cTPHc,3210
257
257
  dstack/_internal/server/deps.py,sha256=31e8SU_ogPJWHIDLkgl7cuC_5V91xbJoLyAj17VanfM,670
258
258
  dstack/_internal/server/main.py,sha256=kztKhCYNoHSDyJJQScWfZXE0naNleJOCQULW6dd8SGw,109
259
- dstack/_internal/server/models.py,sha256=6F_w9kQ2UWfcp5s39zQtUjF9oNh7mCSULnqmmHC3c8M,29695
259
+ dstack/_internal/server/models.py,sha256=nRLgp9VvyRjGi9hGr9CTn2hCZJfHs3-zrW5nS6iibXc,29941
260
260
  dstack/_internal/server/settings.py,sha256=7f2ur03yIElq2y6XvRtWMSOWWycx1jQMqCjksx0lgro,4432
261
261
  dstack/_internal/server/background/__init__.py,sha256=8kTbhEHCeXTibsOlHY1HwqIO6gGb4q8fUa2fcDrah1c,3893
262
262
  dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -267,8 +267,8 @@ dstack/_internal/server/background/tasks/process_instances.py,sha256=E1NLac4ubiF
267
267
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=aJPHnmKQE19JVxJVwGFyyK7buUcbp9Smw9CkFO2DPAk,6135
268
268
  dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=gJ8Um3Vx-brazHVWdtVXPnov4rwvDr-0Vn1Voq1cYBQ,4108
269
269
  dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=9VoGFqdiXcVkCi_NV1VqQdqllDkB0bHIqOHKMIZK1Fg,5183
270
- dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=8nzH9H2Kuaa1g7-SBCdhUWqDztlaQmnECyWqK0S9OaE,37636
271
- dstack/_internal/server/background/tasks/process_runs.py,sha256=Sz_DQdi9Vd4VDbIzOC3lSExopxdnW5kcrDXOeqOR-2o,18522
270
+ dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=s8vdO2LiBLhStCmZ06lpXUuJKkrQq9BfV7QY7lc0TSo,39264
271
+ dstack/_internal/server/background/tasks/process_runs.py,sha256=jVKkhUic91OaSLoGo1ZDKeZninl0usuJz8l36F8HWPc,20980
272
272
  dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=tLLpdtLHN2xC6Ohc6f0we3oevw3pBt0_XrsufaFtIvE,27383
273
273
  dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=0Z3Q409RwSxOL_pgK8JktBthjtESEUH3ahwTLsTdYPk,3800
274
274
  dstack/_internal/server/background/tasks/process_volumes.py,sha256=206rbT4ICeZtEmqh_94Rry_fgHfFLLaSEX9W-svwFk4,5089
@@ -289,6 +289,8 @@ dstack/_internal/server/migrations/versions/252d3743b641_.py,sha256=z3mMF3YCEg6u
289
289
  dstack/_internal/server/migrations/versions/27d3e55759fa_add_pools.py,sha256=yKEQ1OdPZSaO8YxRd986mJjNc9CjeO6SqY5SmL6aGfE,5433
290
290
  dstack/_internal/server/migrations/versions/29826f417010_remove_instancemodel_retry_policy.py,sha256=U4mOQAqhsiZnt89DP3VrI9gbDoINzXrGfZBxd2eOCrM,988
291
291
  dstack/_internal/server/migrations/versions/29c08c6a8cb3_.py,sha256=GjSwd3Q7oiVX8Q7TTIJ0S3BZyvBE5Dy37JHOgyzhtk0,1007
292
+ dstack/_internal/server/migrations/versions/35e90e1b0d3e_add_rolling_deployment_fields.py,sha256=kcvX3KCZadHDSdEwIm08tlH_2YOXMCIEpPv9yv31lR8,1559
293
+ dstack/_internal/server/migrations/versions/35f732ee4cf5_add_projectmodel_is_public.py,sha256=RJvjqV8c-xhz4j5l0CnJdvY69WI5iFK_OFSo9fOn7DQ,1227
292
294
  dstack/_internal/server/migrations/versions/3cf77fb8bcf1_store_repo_clone_url.py,sha256=xLeKpAecepsy_3uszFP6ViDsHRRYmFK-qICKFIGr11s,2494
293
295
  dstack/_internal/server/migrations/versions/3dbdce90d0e0_fix_code_uq_constraint.py,sha256=lmQH-X2zhVIFt39jiYwBfNOpo5y0kH07PqHJUG88fNA,995
294
296
  dstack/_internal/server/migrations/versions/48ad3ecbaea2_do_not_delete_projects_and_runs.py,sha256=FaVmRi9ocsygGEf5j2XDPaYbdgGl98ykycpFul1GdMw,1453
@@ -350,8 +352,8 @@ dstack/_internal/server/routers/gateways.py,sha256=K_VG5Dt_2F_cykWjtFj4GBwtm_D3x
350
352
  dstack/_internal/server/routers/instances.py,sha256=XOogTC9My2Zv0ck37_PbHKoZI-j4QeGrP2sN5wpX7Ow,1579
351
353
  dstack/_internal/server/routers/logs.py,sha256=_Euk283LbhlwHibJTKM-7YcpbeQFtWBqMfbOry3PSkU,1159
352
354
  dstack/_internal/server/routers/metrics.py,sha256=VFgWhkOvxVFDLlRM_kXHYFylLcfCD6UjXInvcd7H4dY,2314
353
- dstack/_internal/server/routers/projects.py,sha256=0R-w_6WXUbNo6fREAexFUQ3RoOJF2D_Iz35elKjym14,2717
354
- dstack/_internal/server/routers/prometheus.py,sha256=UAcOE8dpGZe4Wd0EOIlFPMbjaNjzX8A7iHlooeRvsfo,944
355
+ dstack/_internal/server/routers/projects.py,sha256=MIXqjfx7vY-uS2EPpVqSvAk6oUF6OwSvvujHKavo0Hc,2790
356
+ dstack/_internal/server/routers/prometheus.py,sha256=uKXEDP8jozzK0SdXjiKV1Xc6b0LLWwVm-tMneKWMXcM,1099
355
357
  dstack/_internal/server/routers/repos.py,sha256=Si27qslFefmvRBuR2khvuFyjpd88-Hys-pvIbi9YJK0,3943
356
358
  dstack/_internal/server/routers/runs.py,sha256=p44c_0bqwG1v5S_qX-HKbap1nmk1F2JVqaIXihjiUfY,5388
357
359
  dstack/_internal/server/routers/secrets.py,sha256=50_qJCTYRpnGSlLyS93gqoV17wWewOVmM65PcG1bT_Y,856
@@ -365,7 +367,7 @@ dstack/_internal/server/schemas/fleets.py,sha256=9JcKe8VQM6p705lsgrp0xO08aTC32R8
365
367
  dstack/_internal/server/schemas/gateways.py,sha256=wrLQgSFkpxf-pijeyl2UjR8SpQXVshal6pW8wZf73Yk,1142
366
368
  dstack/_internal/server/schemas/instances.py,sha256=MedAVbKa_1F9zhdSPrjMmL-Og5Dp0cxxvfApKj29194,431
367
369
  dstack/_internal/server/schemas/logs.py,sha256=JGt39fBEFRjHhlGT1jIC6kwQhujxPO8uecjplzjTZXY,402
368
- dstack/_internal/server/schemas/projects.py,sha256=UmHtX0pkr3L_vPsosvRC9JneqBrYaJvVKd4OxhYySHc,566
370
+ dstack/_internal/server/schemas/projects.py,sha256=clcWvGdufczeh3ZazWME7AEz79MSWZulYDnq1b6PNKk,594
369
371
  dstack/_internal/server/schemas/repos.py,sha256=Sit0Tqol79VOMGGp8ncZXLLsZ4INcF-pAA_jwRchYqA,666
370
372
  dstack/_internal/server/schemas/runner.py,sha256=CqlP90yvPKaavAqxLOxewIMq3cHeT_NWfR0YO81JfU0,5151
371
373
  dstack/_internal/server/schemas/runs.py,sha256=XhlTnn67g4NWVmIJFQdy2yPK_EcnSIYOCCSex0XOIes,1341
@@ -373,7 +375,7 @@ dstack/_internal/server/schemas/secrets.py,sha256=mfqLSM7PqxVQ-GIWB6RfPRUOvSvvaR
373
375
  dstack/_internal/server/schemas/users.py,sha256=FuDqwRVe3mOmv497vOZKjI0a_d4Wt2g4ZiCJcyfHEKA,495
374
376
  dstack/_internal/server/schemas/volumes.py,sha256=9iwaQLMhA6aj9XmtdU_9jWVhpzNOtFbDByAe-WYfYh0,673
375
377
  dstack/_internal/server/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
376
- dstack/_internal/server/security/permissions.py,sha256=FJ_8YPhjmebA4jQjtQoAGEaj1Hahb_po0tYRCQ18aaE,4940
378
+ dstack/_internal/server/security/permissions.py,sha256=xFbvMvAIVJGvTHvAJiRB0poK29IpeNdUXR0kT2ljrDA,5994
377
379
  dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
378
380
  dstack/_internal/server/services/config.py,sha256=yo8njslwfS7_blhbPPhOtzCMyg8N_mmFSw5aPvirSzw,10691
379
381
  dstack/_internal/server/services/docker.py,sha256=zAvjFHxIP03Td92NzbGEScz0piLjloE60tQ7vz0AeCA,5328
@@ -386,11 +388,11 @@ dstack/_internal/server/services/offers.py,sha256=4hhqLzmo14_IY84FSDG59Sib1DrmTA
386
388
  dstack/_internal/server/services/permissions.py,sha256=l7Ngdelmn65vjw13NcOdaC6lBYMRuSw6FbHzYwdK3nE,1005
387
389
  dstack/_internal/server/services/placement.py,sha256=U-7z4kJ6ZyrCXzkDychWoOhniz19ooFwiNI2InoTLls,2420
388
390
  dstack/_internal/server/services/plugins.py,sha256=KgBqBUqxjQirRcYNuXVetE4OQj0EPkdC7ccbrNV1WQE,3825
389
- dstack/_internal/server/services/projects.py,sha256=Je1iWZ-ArmyFxK1yMUzod5WRXyiIDxtuVp6pHcdctTQ,14988
391
+ dstack/_internal/server/services/projects.py,sha256=n-J7qgY6nmqDdIaH3Tk0YbC_Hm3UZOBCoV5GBUPAL_Y,16701
390
392
  dstack/_internal/server/services/prometheus.py,sha256=xq5G-Q2BJup9lS2F6__0wUVTs-k1Gr3dYclGzo2WoWo,12474
391
393
  dstack/_internal/server/services/repos.py,sha256=f9ztN7jz_2gvD9hXF5sJwWDVyG2-NHRfjIdSukowPh8,9342
392
394
  dstack/_internal/server/services/resources.py,sha256=VRFOih_cMJdc0c2m9nSGsX8vWAJQV3M6N87aqS_JXfw,699
393
- dstack/_internal/server/services/runs.py,sha256=7nj4iQ6CZT3SEW9h3Vb8CBV65MUSSeQfZwgP_J4YlMo,39179
395
+ dstack/_internal/server/services/runs.py,sha256=6sHi7fcYjbrqK3Cbq-Ype6fKRAP_npu1d4gXgZtxR70,39713
394
396
  dstack/_internal/server/services/users.py,sha256=W-5xL7zsHNjeG7BBK54RWGvIrBOrw-FF0NcG_z9qhoE,7466
395
397
  dstack/_internal/server/services/volumes.py,sha256=vxjFn3ijrvwi9-aXipT0iQgNjgebdwcBRn1mKFL9zAQ,16244
396
398
  dstack/_internal/server/services/backends/__init__.py,sha256=Aqo1GoqhZ_FsLEkCcBrvReKSq6E5w4QbBLrDXfGjiKU,13154
@@ -404,9 +406,9 @@ dstack/_internal/server/services/gateways/__init__.py,sha256=aDTpr45rkaQ2zBHnDQy
404
406
  dstack/_internal/server/services/gateways/client.py,sha256=XIJX3fGBbZ_AG8qZMTSE8KAB_ojq5YJFa0OXoD_dofg,7493
405
407
  dstack/_internal/server/services/gateways/connection.py,sha256=ot3lV85XdmCT45vBWeyj57nLPcLPNm316zu3jMyeWjA,5625
406
408
  dstack/_internal/server/services/gateways/pool.py,sha256=0LclTl1tyx-doS78LeaAKjr-SMp98zuwh5f9s06JSd0,1914
407
- dstack/_internal/server/services/jobs/__init__.py,sha256=hoQsjkUWdJ8xsO03WRwKOX-sHJuhVfsX-1rl26nQwR0,25554
409
+ dstack/_internal/server/services/jobs/__init__.py,sha256=diy01gm7UQWGzkD-gH3YN_frIXzhppxPV3sebCmiAbI,25603
408
410
  dstack/_internal/server/services/jobs/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
409
- dstack/_internal/server/services/jobs/configurators/base.py,sha256=WLRIBM50P8mfvpotzYjK3Gtf5ScQsuijGieH_zaYqCg,11984
411
+ dstack/_internal/server/services/jobs/configurators/base.py,sha256=mkrbrOCIda8AQ9dzkpIjI4452GYfg3RurKS1sYPE1QU,12266
410
412
  dstack/_internal/server/services/jobs/configurators/dev.py,sha256=ufN6Sd8TwIsjQYNZE32fkAqJI7o2zjgoZThbrP-bd7U,2378
411
413
  dstack/_internal/server/services/jobs/configurators/service.py,sha256=FOWrLE-6YFSMuGqjOwYTLMV4FuIM5lCMDFjS0l0CoLI,929
412
414
  dstack/_internal/server/services/jobs/configurators/task.py,sha256=0-B3oO-61Eq4-mmlLmqJPliFKHhvvIV0tqc12slcQuA,1436
@@ -430,8 +432,8 @@ dstack/_internal/server/services/proxy/services/service_proxy.py,sha256=4JrSxHqh
430
432
  dstack/_internal/server/services/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
431
433
  dstack/_internal/server/services/runner/client.py,sha256=8xcZNdnQPHtXCVS2RdVS2_KDcrCUa1K6cnqcDZsisBU,15653
432
434
  dstack/_internal/server/services/runner/ssh.py,sha256=H-X0015ZPwYq5tc31ytFF1uNaUAr9itAsABI2oPJWrk,5017
433
- dstack/_internal/server/services/services/__init__.py,sha256=HQz72SNN8W9gUQ5INyO_Wd8TR9j3V6qoHFGEDEI920w,10862
434
- dstack/_internal/server/services/services/autoscalers.py,sha256=0o_w9La-ex_P3VKG88w_XN3hkLkzryv5l1cH3pkZyAE,4315
435
+ dstack/_internal/server/services/services/__init__.py,sha256=tV7-WyhPf2MFtYPO6j4tC5Gtg1iz6RzP_l0Oy8oMrWw,11597
436
+ dstack/_internal/server/services/services/autoscalers.py,sha256=wg3QgfdKcaBdbtyJJlAzeMlicGKQMuRGpMPZKyemK5U,4447
435
437
  dstack/_internal/server/services/services/options.py,sha256=BEpZbRY4PKFVkNNWxLtY--QISqBL1_aPPzZYLPpRgvM,2234
436
438
  dstack/_internal/server/services/storage/__init__.py,sha256=ZjlLdCQiclM7h_dKJM9HXjMJDKCFOAf3yI4iO6K3HHk,1384
437
439
  dstack/_internal/server/services/storage/base.py,sha256=eK6wLny_QmRuTUDXo_WaZ8zdGpqduI0VeCO1n_-Yyxc,589
@@ -462,9 +464,9 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
462
464
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
463
465
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
464
466
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
465
- dstack/_internal/server/statics/index.html,sha256=E5vDpRhmK0lMacdC6HVyDb2wyQm75uRmsQ2EMwu-3iQ,10468
466
- dstack/_internal/server/statics/main-2066f1f22ddb4557bcde.js,sha256=Fl7-1DvaGJV7YDrLwcdCdyGQHlh9FRVxVFFGWQYSLgs,6640579
467
- dstack/_internal/server/statics/main-2066f1f22ddb4557bcde.js.map,sha256=Ip-VpaoYT1iHP6tirCf6RADiZ2rOy2AGGOuSUqNEL00,8709013
467
+ dstack/_internal/server/statics/index.html,sha256=RZEf5ld8bD0jUQaSdaTE2A5SppiPKW83GnA3WDhB22c,10468
468
+ dstack/_internal/server/statics/main-0ac1e1583684417ae4d1.js,sha256=5MhxVHWpjhG1yUn1_EuxaqZnTKiyxh7EvT6AewCtZR8,6640162
469
+ dstack/_internal/server/statics/main-0ac1e1583684417ae4d1.js.map,sha256=ichOiyuaMldNYBY7wc5PA7fYilYXbDU-HyRuh8MBO5c,8708636
468
470
  dstack/_internal/server/statics/main-f39c418b05fe14772dd8.css,sha256=Rpuq_7-gUuuWprZuHa4xN0Mkk08_65nmPAF4uXzuT8k,1355497
469
471
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
470
472
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
@@ -543,7 +545,7 @@ dstack/_internal/server/statics/static/media/logo.f602feeb138844eda97c8cb6414614
543
545
  dstack/_internal/server/statics/static/media/okta.12f178e6873a1100965f2a4dbd18fcec.svg,sha256=KqFI05gQM135zC1plF1WBRF2F7CyKL7km97WKsZjAHI,319
544
546
  dstack/_internal/server/statics/static/media/theme.3994c817bb7dda191c1c9640dee0bf42.svg,sha256=ZxFFBVZWuRLqmWH4zhwGLNtKjOzHj-5MGJRunFAtu1I,561
545
547
  dstack/_internal/server/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
546
- dstack/_internal/server/testing/common.py,sha256=kFVgsk_dl3akkh5rZ8kSJcKT0-K44nxRENkj2cGPvXU,31569
548
+ dstack/_internal/server/testing/common.py,sha256=KwM6SMDbYNovuKCuU3PUWM0-OTdO175TF8N24BpIhgY,31884
547
549
  dstack/_internal/server/testing/conf.py,sha256=-zhujfFjTHNfQDOK-hBck32By11c_kC0OeinB3esQGg,1902
548
550
  dstack/_internal/server/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
549
551
  dstack/_internal/server/utils/common.py,sha256=PbjXtqYy1taKXpyG5ys8cIrz9MXqc9dBAsR_9D1brrk,1414
@@ -570,7 +572,7 @@ dstack/api/utils.py,sha256=_la3CRk1vgrPGkInPI1SOr33e8Jvh8ziJC32fjvKnaU,4188
570
572
  dstack/api/_public/__init__.py,sha256=mbzsdV3nWUJRksc7czX5C0iPT3NA6YRpriQQRiXwIbY,3429
571
573
  dstack/api/_public/backends.py,sha256=w_cIUVU3L1tN8VoPH6-ltq-oJewlfXWTiEFXfDvm-1Q,1056
572
574
  dstack/api/_public/repos.py,sha256=2ufUtxY8WyPci9tCGYzsnyIFTXNJfTuPzDYvpTydZ6k,6133
573
- dstack/api/_public/runs.py,sha256=e_-CqkzHJqeUvO_yXbLnmO8ADZEcgRtagZoL5fr2wmU,28006
575
+ dstack/api/_public/runs.py,sha256=lm_Xa7z_dfGQquGntxOcaOmCl7T5eo5T_kNv8QkKW9I,28456
574
576
  dstack/api/huggingface/__init__.py,sha256=oIrEij3wttLZ1yrywEGvCMd6zswMQrX5pPjrqdSi0UA,2201
575
577
  dstack/api/server/__init__.py,sha256=Zyl1M51tifn4pB150yIsh39N96qUgMjg5XplcElHDxg,6097
576
578
  dstack/api/server/_backends.py,sha256=tSvJ4j-yp-S-4IYo7pKHluDaSsx6Xbwo08Ff6Do85fo,1639
@@ -579,7 +581,7 @@ dstack/api/server/_gateways.py,sha256=2wyoERBl9R-uWtBI0AiRgLFLtNRlagQxlcgOWHkAlh
579
581
  dstack/api/server/_group.py,sha256=f9a_YvwZ7s1vDTQhOWHLwm3kO84C5R_zXToD4cxAnvY,432
580
582
  dstack/api/server/_logs.py,sha256=ng8QvFAIaoVOVChTK6Wuu5BeM6y7gAdx30KEYRsn9xA,500
581
583
  dstack/api/server/_metrics.py,sha256=OPb8sLhI_U605sHOPrELgy0_6cNFLJVfpvr-qkEukRM,670
582
- dstack/api/server/_projects.py,sha256=g6kNSU6jer8u7Kaut1I0Ft4wRMLBBCQShJf3fOB63hQ,1440
584
+ dstack/api/server/_projects.py,sha256=r0v0xlrRLtXCrI3QyjWF3LD2rAQx1F2ON8lCVQ9X5Qk,1486
583
585
  dstack/api/server/_repos.py,sha256=bqsKuZWyiNLE8UAdSZrYNtk1J3Gu5MXXnTMIoM9jxpI,1770
584
586
  dstack/api/server/_runs.py,sha256=9XjsjH05Q26iagDwv8PZ4PbzG8KfSL1mEOHkem2FZ74,3086
585
587
  dstack/api/server/_secrets.py,sha256=VqLfrIcmBJtPxNDRkXTG44H5SWoY788YJapScUukvdY,1576
@@ -595,8 +597,8 @@ dstack/plugins/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
595
597
  dstack/plugins/builtin/rest_plugin/__init__.py,sha256=lgTsq8Z6Km2F2UhPRChVB4vDM5ZpWtdk1iB1aa20ypA,440
596
598
  dstack/plugins/builtin/rest_plugin/_models.py,sha256=9hgVuU6OGSxidar88XhQnNo9izYWeQvVH45ciErv-Es,1910
597
599
  dstack/plugins/builtin/rest_plugin/_plugin.py,sha256=iv8TmQh959iEUZjCFTzmGnFW8fHukTVpPmD4iBzOfS4,5361
598
- dstack-0.19.13.dist-info/METADATA,sha256=NGfazUY-dpac2klfg5O7t1cnoRu93oBi_2uaoFLXaXg,20513
599
- dstack-0.19.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
600
- dstack-0.19.13.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
601
- dstack-0.19.13.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
602
- dstack-0.19.13.dist-info/RECORD,,
600
+ dstack-0.19.15rc1.dist-info/METADATA,sha256=2GTDR6vPXhmDhlrFN_Hfeo27viDk0hrw2I2a4w0SvIs,20516
601
+ dstack-0.19.15rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
602
+ dstack-0.19.15rc1.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
603
+ dstack-0.19.15rc1.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
604
+ dstack-0.19.15rc1.dist-info/RECORD,,