dstack 0.19.32__py3-none-any.whl → 0.19.33__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 (46) hide show
  1. dstack/_internal/cli/commands/offer.py +1 -1
  2. dstack/_internal/cli/services/configurators/run.py +1 -5
  3. dstack/_internal/core/backends/aws/compute.py +8 -5
  4. dstack/_internal/core/backends/azure/compute.py +9 -6
  5. dstack/_internal/core/backends/base/compute.py +40 -17
  6. dstack/_internal/core/backends/base/offers.py +5 -1
  7. dstack/_internal/core/backends/datacrunch/compute.py +9 -6
  8. dstack/_internal/core/backends/gcp/compute.py +137 -7
  9. dstack/_internal/core/backends/gcp/models.py +7 -0
  10. dstack/_internal/core/backends/gcp/resources.py +87 -5
  11. dstack/_internal/core/backends/hotaisle/compute.py +11 -1
  12. dstack/_internal/core/backends/kubernetes/compute.py +161 -83
  13. dstack/_internal/core/backends/kubernetes/models.py +4 -2
  14. dstack/_internal/core/backends/nebius/compute.py +9 -6
  15. dstack/_internal/core/backends/oci/compute.py +9 -6
  16. dstack/_internal/core/backends/runpod/compute.py +10 -6
  17. dstack/_internal/core/backends/vastai/compute.py +3 -1
  18. dstack/_internal/core/backends/vastai/configurator.py +0 -1
  19. dstack/_internal/core/models/fleets.py +1 -1
  20. dstack/_internal/core/models/profiles.py +1 -1
  21. dstack/_internal/core/models/runs.py +3 -2
  22. dstack/_internal/core/models/users.py +10 -0
  23. dstack/_internal/core/services/configs/__init__.py +1 -0
  24. dstack/_internal/server/background/tasks/process_instances.py +5 -1
  25. dstack/_internal/server/background/tasks/process_running_jobs.py +1 -0
  26. dstack/_internal/server/migrations/versions/ff1d94f65b08_user_ssh_key.py +34 -0
  27. dstack/_internal/server/models.py +3 -0
  28. dstack/_internal/server/routers/runs.py +5 -1
  29. dstack/_internal/server/routers/users.py +14 -2
  30. dstack/_internal/server/services/runs.py +9 -4
  31. dstack/_internal/server/services/users.py +35 -2
  32. dstack/_internal/server/statics/index.html +1 -1
  33. dstack/_internal/server/statics/main-720ce3a11140daa480cc.css +3 -0
  34. dstack/_internal/server/statics/{main-c51afa7f243e24d3e446.js → main-97c7e184573ca23f9fe4.js} +12218 -7625
  35. dstack/_internal/server/statics/{main-c51afa7f243e24d3e446.js.map → main-97c7e184573ca23f9fe4.js.map} +1 -1
  36. dstack/api/_public/__init__.py +9 -12
  37. dstack/api/_public/repos.py +0 -21
  38. dstack/api/_public/runs.py +64 -9
  39. dstack/api/server/_users.py +17 -2
  40. dstack/version.py +2 -2
  41. {dstack-0.19.32.dist-info → dstack-0.19.33.dist-info}/METADATA +2 -2
  42. {dstack-0.19.32.dist-info → dstack-0.19.33.dist-info}/RECORD +45 -44
  43. dstack/_internal/server/statics/main-56191fbfe77f49b251de.css +0 -3
  44. {dstack-0.19.32.dist-info → dstack-0.19.33.dist-info}/WHEEL +0 -0
  45. {dstack-0.19.32.dist-info → dstack-0.19.33.dist-info}/entry_points.txt +0 -0
  46. {dstack-0.19.32.dist-info → dstack-0.19.33.dist-info}/licenses/LICENSE.md +0 -0
@@ -2,12 +2,11 @@ from typing import Optional
2
2
 
3
3
  import dstack._internal.core.services.api_client as api_client_service
4
4
  from dstack._internal.core.errors import ConfigurationError
5
- from dstack._internal.core.services.configs import ConfigManager
6
5
  from dstack._internal.utils.logging import get_logger
7
- from dstack._internal.utils.path import PathLike
6
+ from dstack._internal.utils.path import PathLike as PathLike
8
7
  from dstack.api._public.backends import BackendCollection
9
- from dstack.api._public.repos import RepoCollection, get_ssh_keypair
10
- from dstack.api._public.runs import RunCollection
8
+ from dstack.api._public.repos import RepoCollection
9
+ from dstack.api._public.runs import RunCollection, warn
11
10
  from dstack.api.server import APIClient
12
11
 
13
12
  logger = get_logger(__name__)
@@ -35,24 +34,24 @@ class Client:
35
34
  # Args:
36
35
  # api_client: low-level server API client
37
36
  # project_name: project name used for runs
38
- # ssh_identity_file: SSH keypair to access instances
37
+ # ssh_identity_file: deprecated and will be removed in 0.19.40
39
38
  # """
40
39
  self._client = api_client
41
40
  self._project = project_name
42
41
  self._repos = RepoCollection(api_client, project_name)
43
42
  self._backends = BackendCollection(api_client, project_name)
44
43
  self._runs = RunCollection(api_client, project_name, self)
45
- if ssh_identity_file:
46
- self.ssh_identity_file = str(ssh_identity_file)
47
- else:
48
- self.ssh_identity_file = get_ssh_keypair(None, ConfigManager().dstack_key_path)
44
+ if ssh_identity_file is not None:
45
+ warn(
46
+ "[code]ssh_identity_file[/code] in [code]Client[/code] is deprecated and ignored; will be removed"
47
+ " since 0.19.40"
48
+ )
49
49
 
50
50
  @staticmethod
51
51
  def from_config(
52
52
  project_name: Optional[str] = None,
53
53
  server_url: Optional[str] = None,
54
54
  user_token: Optional[str] = None,
55
- ssh_identity_file: Optional[PathLike] = None,
56
55
  ) -> "Client":
57
56
  """
58
57
  Creates a Client using the default configuration from `~/.dstack/config.yml` if it exists.
@@ -61,7 +60,6 @@ class Client:
61
60
  project_name: The name of the project. required if `server_url` and `user_token` are specified.
62
61
  server_url: The dstack server URL (e.g. `http://localhost:3000/` or `https://sky.dstack.ai`).
63
62
  user_token: The dstack user token.
64
- ssh_identity_file: The private SSH key path for SSH tunneling.
65
63
 
66
64
  Returns:
67
65
  A client instance.
@@ -75,7 +73,6 @@ class Client:
75
73
  return Client(
76
74
  api_client=api_client,
77
75
  project_name=project_name,
78
- ssh_identity_file=ssh_identity_file,
79
76
  )
80
77
 
81
78
  @property
@@ -1,4 +1,3 @@
1
- from pathlib import Path
2
1
  from typing import Literal, Optional, Union, overload
3
2
 
4
3
  from git import InvalidGitRepositoryError
@@ -18,7 +17,6 @@ from dstack._internal.core.services.repos import (
18
17
  get_repo_creds_and_default_branch,
19
18
  load_repo,
20
19
  )
21
- from dstack._internal.utils.crypto import generate_rsa_key_pair
22
20
  from dstack._internal.utils.logging import get_logger
23
21
  from dstack._internal.utils.path import PathLike
24
22
  from dstack.api.server import APIClient
@@ -209,22 +207,3 @@ class RepoCollection:
209
207
  return method(self._project, repo_id)
210
208
  except ResourceNotExistsError:
211
209
  return None
212
-
213
-
214
- def get_ssh_keypair(key_path: Optional[PathLike], dstack_key_path: Path) -> str:
215
- """Returns a path to the private key"""
216
- if key_path is not None:
217
- key_path = Path(key_path).expanduser().resolve()
218
- pub_key = (
219
- key_path
220
- if key_path.suffix == ".pub"
221
- else key_path.with_suffix(key_path.suffix + ".pub")
222
- )
223
- private_key = pub_key.with_suffix("")
224
- if pub_key.exists() and private_key.exists():
225
- return str(private_key)
226
- raise ConfigurationError(f"Make sure valid keypair exists: {private_key}(.pub)")
227
-
228
- if not dstack_key_path.exists():
229
- generate_rsa_key_pair(private_key_path=dstack_key_path)
230
- return str(dstack_key_path)
@@ -1,4 +1,6 @@
1
1
  import base64
2
+ import hashlib
3
+ import os
2
4
  import queue
3
5
  import tempfile
4
6
  import threading
@@ -15,6 +17,7 @@ from urllib.parse import urlparse
15
17
  from websocket import WebSocketApp
16
18
 
17
19
  import dstack.api as api
20
+ from dstack._internal.cli.utils.common import warn
18
21
  from dstack._internal.core.consts import DSTACK_RUNNER_HTTP_PORT, DSTACK_RUNNER_SSH_PORT
19
22
  from dstack._internal.core.errors import ClientError, ConfigurationError, ResourceNotExistsError
20
23
  from dstack._internal.core.models.backends.base import BackendType
@@ -45,11 +48,14 @@ from dstack._internal.core.models.runs import (
45
48
  get_service_port,
46
49
  )
47
50
  from dstack._internal.core.models.runs import Run as RunModel
51
+ from dstack._internal.core.models.users import UserWithCreds
52
+ from dstack._internal.core.services.configs import ConfigManager
48
53
  from dstack._internal.core.services.logs import URLReplacer
49
54
  from dstack._internal.core.services.ssh.attach import SSHAttach
50
55
  from dstack._internal.core.services.ssh.ports import PortsLock
51
56
  from dstack._internal.server.schemas.logs import PollLogsRequest
52
57
  from dstack._internal.utils.common import get_or_error, make_proxy_url
58
+ from dstack._internal.utils.crypto import generate_rsa_key_pair
53
59
  from dstack._internal.utils.files import create_file_archive
54
60
  from dstack._internal.utils.logging import get_logger
55
61
  from dstack._internal.utils.path import PathLike, path_in_dir
@@ -72,16 +78,20 @@ class Run(ABC):
72
78
  self,
73
79
  api_client: APIClient,
74
80
  project: str,
75
- ssh_identity_file: Optional[PathLike],
76
81
  run: RunModel,
77
82
  ports_lock: Optional[PortsLock] = None,
83
+ ssh_identity_file: Optional[PathLike] = None,
78
84
  ):
79
85
  self._api_client = api_client
80
86
  self._project = project
81
- self._ssh_identity_file = ssh_identity_file
82
87
  self._run = run
83
88
  self._ports_lock: Optional[PortsLock] = ports_lock
84
89
  self._ssh_attach: Optional[SSHAttach] = None
90
+ if ssh_identity_file is not None:
91
+ warn(
92
+ "[code]ssh_identity_file[/code] in [code]Run[/code] is deprecated and ignored; will be removed"
93
+ " since 0.19.40"
94
+ )
85
95
 
86
96
  @property
87
97
  def name(self) -> str:
@@ -270,9 +280,33 @@ class Run(ABC):
270
280
  Raises:
271
281
  dstack.api.PortUsedError: If ports are in use or the run is attached by another process.
272
282
  """
273
- ssh_identity_file = ssh_identity_file or self._ssh_identity_file
274
- if ssh_identity_file is None:
275
- raise ConfigurationError("SSH identity file is required to attach to the run")
283
+ if not ssh_identity_file:
284
+ user = self._api_client.users.get_my_user()
285
+ run_ssh_key_pub = self._run.run_spec.ssh_key_pub
286
+ config_manager = ConfigManager()
287
+ if isinstance(user, UserWithCreds) and user.ssh_public_key == run_ssh_key_pub:
288
+ token_hash = hashlib.sha1(user.creds.token.encode()).hexdigest()[:8]
289
+ config_manager.dstack_ssh_dir.mkdir(parents=True, exist_ok=True)
290
+ ssh_identity_file = config_manager.dstack_ssh_dir / token_hash
291
+
292
+ def key_opener(path, flags):
293
+ return os.open(path, flags, 0o600)
294
+
295
+ with open(ssh_identity_file, "wb", opener=key_opener) as f:
296
+ assert user.ssh_private_key
297
+ f.write(user.ssh_private_key.encode())
298
+ else:
299
+ if config_manager.dstack_key_path.exists():
300
+ # TODO: Remove since 0.19.40
301
+ warn(
302
+ f"Using legacy [code]{config_manager.dstack_key_path}[/code]."
303
+ " Future versions will use the user SSH key from the server.",
304
+ )
305
+ ssh_identity_file = config_manager.dstack_key_path
306
+ else:
307
+ raise ConfigurationError(
308
+ f"User SSH key doen't match; default SSH key ({config_manager.dstack_key_path}) doesn't exist"
309
+ )
276
310
  ssh_identity_file = str(ssh_identity_file)
277
311
 
278
312
  job = self._find_job(replica_num=replica_num, job_num=job_num)
@@ -434,6 +468,7 @@ class RunCollection:
434
468
  profile: Optional[Profile] = None,
435
469
  configuration_path: Optional[str] = None,
436
470
  repo_dir: Optional[str] = None,
471
+ ssh_identity_file: Optional[PathLike] = None,
437
472
  ) -> RunPlan:
438
473
  """
439
474
  Get a run plan.
@@ -465,6 +500,19 @@ class RunCollection:
465
500
  if repo_dir is None and configuration.repos:
466
501
  repo_dir = configuration.repos[0].path
467
502
 
503
+ if ssh_identity_file:
504
+ ssh_key_pub = Path(ssh_identity_file).with_suffix(".pub").read_text()
505
+ else:
506
+ config_manager = ConfigManager()
507
+ if not config_manager.dstack_key_path.exists():
508
+ generate_rsa_key_pair(private_key_path=config_manager.dstack_key_path)
509
+ warn(
510
+ f"Using legacy [code]{config_manager.dstack_key_path.with_suffix('.pub')}[/code]."
511
+ " Future versions will use the user SSH key from the server.",
512
+ )
513
+ ssh_key_pub = config_manager.dstack_key_path.with_suffix(".pub").read_text()
514
+ # TODO: Uncomment after 0.19.40
515
+ # ssh_key_pub = None
468
516
  run_spec = RunSpec(
469
517
  run_name=configuration.name,
470
518
  repo_id=repo.repo_id,
@@ -477,7 +525,7 @@ class RunCollection:
477
525
  configuration_path=configuration_path,
478
526
  configuration=configuration,
479
527
  profile=profile,
480
- ssh_key_pub=Path(self._client.ssh_identity_file + ".pub").read_text().strip(),
528
+ ssh_key_pub=ssh_key_pub,
481
529
  )
482
530
  logger.debug("Getting run plan")
483
531
  run_plan = self._api_client.runs.get_plan(self._project, run_spec)
@@ -546,6 +594,7 @@ class RunCollection:
546
594
  profile: Optional[Profile] = None,
547
595
  configuration_path: Optional[str] = None,
548
596
  reserve_ports: bool = True,
597
+ ssh_identity_file: Optional[PathLike] = None,
549
598
  ) -> Run:
550
599
  """
551
600
  Apply the run configuration.
@@ -567,6 +616,7 @@ class RunCollection:
567
616
  repo=repo,
568
617
  profile=profile,
569
618
  configuration_path=configuration_path,
619
+ ssh_identity_file=ssh_identity_file,
570
620
  )
571
621
  run = self.apply_plan(
572
622
  run_plan=run_plan,
@@ -709,6 +759,13 @@ class RunCollection:
709
759
  creation_policy=creation_policy,
710
760
  idle_duration=idle_duration, # type: ignore[assignment]
711
761
  )
762
+ config_manager = ConfigManager()
763
+ if not config_manager.dstack_key_path.exists():
764
+ generate_rsa_key_pair(private_key_path=config_manager.dstack_key_path)
765
+ warn(
766
+ f"Using legacy [code]{config_manager.dstack_key_path.with_suffix('.pub')}[/code]."
767
+ " Future versions will use the user SSH key from the server.",
768
+ )
712
769
  run_spec = RunSpec(
713
770
  run_name=run_name,
714
771
  repo_id=repo.repo_id,
@@ -718,7 +775,7 @@ class RunCollection:
718
775
  configuration_path=configuration_path,
719
776
  configuration=configuration,
720
777
  profile=profile,
721
- ssh_key_pub=Path(self._client.ssh_identity_file + ".pub").read_text().strip(),
778
+ ssh_key_pub=config_manager.dstack_key_path.with_suffix(".pub").read_text(),
722
779
  )
723
780
  logger.debug("Getting run plan")
724
781
  run_plan = self._api_client.runs.get_plan(self._project, run_spec)
@@ -800,7 +857,6 @@ class RunCollection:
800
857
  return Run(
801
858
  self._api_client,
802
859
  self._project,
803
- self._client.ssh_identity_file,
804
860
  run,
805
861
  )
806
862
 
@@ -808,7 +864,6 @@ class RunCollection:
808
864
  return Run(
809
865
  self._api_client,
810
866
  self._project,
811
- self._client.ssh_identity_file,
812
867
  run,
813
868
  ports_lock,
814
869
  )
@@ -1,6 +1,6 @@
1
1
  from typing import List
2
2
 
3
- from pydantic import parse_obj_as
3
+ from pydantic import ValidationError, parse_obj_as
4
4
 
5
5
  from dstack._internal.core.models.users import GlobalRole, User, UserWithCreds
6
6
  from dstack._internal.server.schemas.users import (
@@ -18,8 +18,23 @@ class UsersAPIClient(APIClientGroup):
18
18
  return parse_obj_as(List[User.__response__], resp.json())
19
19
 
20
20
  def get_my_user(self) -> User:
21
+ """
22
+ Returns `User` with pre-0.19.33 servers, or `UserWithCreds` with newer servers.
23
+ """
24
+
21
25
  resp = self._request("/api/users/get_my_user")
22
- return parse_obj_as(User.__response__, resp.json())
26
+ try:
27
+ return parse_obj_as(UserWithCreds.__response__, resp.json())
28
+ except ValidationError as e:
29
+ # Compatibility with pre-0.19.33 server
30
+ if (
31
+ len(e.errors()) == 1
32
+ and e.errors()[0]["loc"] == ("__root__", "creds")
33
+ and e.errors()[0]["type"] == "value_error.missing"
34
+ ):
35
+ return parse_obj_as(User.__response__, resp.json())
36
+ else:
37
+ raise
23
38
 
24
39
  def get_user(self, username: str) -> User:
25
40
  body = GetUserRequest(username=username)
dstack/version.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.19.32"
1
+ __version__ = "0.19.33"
2
2
  __is_release__ = True
3
- base_image = "0.11rc2"
3
+ base_image = "0.11"
4
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.32
3
+ Version: 0.19.33
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
@@ -22,7 +22,7 @@ Requires-Dist: cryptography
22
22
  Requires-Dist: cursor
23
23
  Requires-Dist: filelock
24
24
  Requires-Dist: gitpython
25
- Requires-Dist: gpuhunt==0.1.8
25
+ Requires-Dist: gpuhunt==0.1.10
26
26
  Requires-Dist: ignore-python>=0.2.0
27
27
  Requires-Dist: jsonschema
28
28
  Requires-Dist: orjson
@@ -1,5 +1,5 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=DLiOZq8Gabr_DjHGIzjxI9IasDON-4xNaF3b4Rt2BBI,105
2
+ dstack/version.py,sha256=_FEUL4dv2EnNUXCWAEH2UsClkAJ5_z4QOZGhqRl7P-Q,102
3
3
  dstack/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  dstack/_internal/compat.py,sha256=bF9U9fTMfL8UVhCouedoUSTYFl7UAOiU0WXrnRoByxw,40
5
5
  dstack/_internal/settings.py,sha256=FYtd7tRk17Oc62Kl_3O8NuT5JHb8TKhLThl1TsfjjVs,1390
@@ -16,7 +16,7 @@ dstack/_internal/cli/commands/gateway.py,sha256=L7bcNrFzzw7w0cjbFszhH_u7dEAiK7Rf
16
16
  dstack/_internal/cli/commands/init.py,sha256=Q0jmftfa1e_n7NahDVVeC4PlaoRqfkQ98MF--Lax9ws,4228
17
17
  dstack/_internal/cli/commands/logs.py,sha256=IOiRIvC9vpNORMQSOGzVbcXfrWfTq7LAPPSD7E_iK9U,1558
18
18
  dstack/_internal/cli/commands/metrics.py,sha256=T-kXQgARIfWj01ROwiw5te5HeeE2trsPHWetQqhL_qA,5892
19
- dstack/_internal/cli/commands/offer.py,sha256=sXjhp3_OTafG7QqPcNCvS5AtkgxoQeO4tbsuUIMr95A,6241
19
+ dstack/_internal/cli/commands/offer.py,sha256=ZYMO8adIfgcPIzhZtO89SruJ2tIGLkNHIDrli7X95XE,6271
20
20
  dstack/_internal/cli/commands/project.py,sha256=MFXjGklTOYa149h4pveTIr2jay0nDa1DXlDdxAEPj6Q,6576
21
21
  dstack/_internal/cli/commands/ps.py,sha256=5RU4mcL4-FT4PcXktfKb4htCOPqia7mIuVGgfK7x9lY,1894
22
22
  dstack/_internal/cli/commands/secrets.py,sha256=Qke4UEGeRP5MfbhKFg4-T07FJEU_3nuCmPIGzQz0nuA,3142
@@ -33,7 +33,7 @@ dstack/_internal/cli/services/configurators/__init__.py,sha256=AwbKV85_XH0V8IS8v
33
33
  dstack/_internal/cli/services/configurators/base.py,sha256=9mabsRsKHY7xFl8yDRM__FOEQvtEYOn_4KeXKzO6-vA,3244
34
34
  dstack/_internal/cli/services/configurators/fleet.py,sha256=xchLFqHkm0zVs3tEVMlYXd4lGjP_OWzdp3nzqNg7b8k,19374
35
35
  dstack/_internal/cli/services/configurators/gateway.py,sha256=B2aEoVhhRZGk25OekR7BT4eAvAgZGAyVOw7DlSuo2jg,8755
36
- dstack/_internal/cli/services/configurators/run.py,sha256=lD14geWv8WtImrVDa5w9bXmA8JK8xIcTUawBTbbu6ZE,39543
36
+ dstack/_internal/cli/services/configurators/run.py,sha256=HGE3LBO6WfWis9ykXsH-3xVBdGk4e5SdIVWmblKQV_k,39404
37
37
  dstack/_internal/cli/services/configurators/volume.py,sha256=ZeESHttKFERBFysJvSGFC4UXUOLghKlzcilXbL48s-c,8346
38
38
  dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  dstack/_internal/cli/utils/common.py,sha256=xgq2Rdx6wGS1NLx8FlmkjKrGaNYD428oeBB4VMjvJ5c,3447
@@ -59,24 +59,24 @@ dstack/_internal/core/backends/amddevcloud/configurator.py,sha256=WF4e-Yh2jMuTKQ
59
59
  dstack/_internal/core/backends/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  dstack/_internal/core/backends/aws/auth.py,sha256=BAe3HAedoAO42Fbv7YhpODKWlyil8M0PuRJsL-_u_kw,978
61
61
  dstack/_internal/core/backends/aws/backend.py,sha256=pjROH-S9pgrSMm-Eox_ocL7cTU6mIMRxvURq7Vi-2J8,876
62
- dstack/_internal/core/backends/aws/compute.py,sha256=hyQnitebGLoJts6b07-7Ztpu_phGMEBXcKXt3t_o6eo,45512
62
+ dstack/_internal/core/backends/aws/compute.py,sha256=8fy6B3BcoFCti3dWO0E6n0I5hXU61nnTe5ZgA5swu1o,45511
63
63
  dstack/_internal/core/backends/aws/configurator.py,sha256=X4CS-DnvsbdYCEVo6HBKLmH0YQ-zh5RucOjyhEcRca8,7634
64
64
  dstack/_internal/core/backends/aws/models.py,sha256=EUCHXHmZnshe3rwI9UtjilwcUMu1Z7MO4Y4-nlZ_IcA,4404
65
65
  dstack/_internal/core/backends/aws/resources.py,sha256=vwfy2lz9E0RVl3Lhs8dsuWMhhJOjv1NDckqSNucs7f0,24025
66
66
  dstack/_internal/core/backends/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  dstack/_internal/core/backends/azure/auth.py,sha256=CHp3QRNx3tIwkhyOY_l8WU-ElY4Pxhavoy9JSdwr15g,1259
68
68
  dstack/_internal/core/backends/azure/backend.py,sha256=XySTor8v_tLkZctDBryrFHrbVzQgNf_RUPkXQYplvwM,746
69
- dstack/_internal/core/backends/azure/compute.py,sha256=hOq3WtXy6nVAJkCvfbs3j7ajPhnpXQKgL7-KEdFrSYI,25440
69
+ dstack/_internal/core/backends/azure/compute.py,sha256=v9rTelZWTjJ6BTfZidiAGA12jWIuDmak1LDjwVlPvIs,25429
70
70
  dstack/_internal/core/backends/azure/configurator.py,sha256=tKovBgMvyKmCogZ2OMxOJ-Sh_TCBqYXBvbBM-kgyeBI,18367
71
71
  dstack/_internal/core/backends/azure/models.py,sha256=ap0WsYBSFdDCxY0G3W1sg2DBN2k0xknz6bp8Ypf6phs,3356
72
72
  dstack/_internal/core/backends/azure/resources.py,sha256=cJWS2Yjxdg-XtjpdBxfVDZaX_gTbuoEpmdjTxdA9uIw,3431
73
73
  dstack/_internal/core/backends/azure/utils.py,sha256=taHMJq6UHRzUXLUcO2P5VCKy3wJaye2bG-6QdkEPNdY,1741
74
74
  dstack/_internal/core/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  dstack/_internal/core/backends/base/backend.py,sha256=hdFMHED1RMV9GVfLSU0yGhGE-cXlbLvt1coDA885PMM,505
76
- dstack/_internal/core/backends/base/compute.py,sha256=DxsQG7toam-0PmqCc9VoQy5hmYiVkg0GbdLkS9Ki_9c,34934
76
+ dstack/_internal/core/backends/base/compute.py,sha256=MEglNP0H9iLi0a88ElRUxVcs1-qtpGEuWkxnrBp4KoA,36018
77
77
  dstack/_internal/core/backends/base/configurator.py,sha256=TKG5iJlOXxVT2agE_ruMW8JGt2dtwXY7ghmJN8bEWlw,4299
78
78
  dstack/_internal/core/backends/base/models.py,sha256=Ij0osOl-T-ABsKLoVg2eY81DMkwdWkevAnjXj2QnLXI,532
79
- dstack/_internal/core/backends/base/offers.py,sha256=nHIs0O3j5X0i8mUOs5zXM9UAPxy9v7ZVqnmzmJEoFo8,7501
79
+ dstack/_internal/core/backends/base/offers.py,sha256=87I7f2Perkc3Gt9tJ4stWvPAP3ZklJNk8XHKAXYaVmg,7555
80
80
  dstack/_internal/core/backends/cloudrift/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  dstack/_internal/core/backends/cloudrift/api_client.py,sha256=mI3_ttwujfSunTiTIelnc1XaLBlfxsKsacrlyB12f8c,8178
82
82
  dstack/_internal/core/backends/cloudrift/backend.py,sha256=Jz3nIQsa3TnMISVXK6EU43O0B7FgIMxwwaEBmd_s5BY,596
@@ -91,7 +91,7 @@ dstack/_internal/core/backends/cudo/configurator.py,sha256=3wAegbWDI2DcWD_225PNS
91
91
  dstack/_internal/core/backends/cudo/models.py,sha256=6sfEqY2hvTpIACkyT4mhD3D8K5TsW_pupys9nqtrgoI,1055
92
92
  dstack/_internal/core/backends/datacrunch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  dstack/_internal/core/backends/datacrunch/backend.py,sha256=-wanJJ_K_wOXezxTSRgsK1MjsOuCl0MoVJREPj3SgM8,606
94
- dstack/_internal/core/backends/datacrunch/compute.py,sha256=5TAE5VutUk4WW9NUtB9zV7ztvjkBnSiYgVxH-9D-H2o,9435
94
+ dstack/_internal/core/backends/datacrunch/compute.py,sha256=aGZjgyGyuOAfNKt93yRYCuCYYfuKC-71ULh4CdIowEs,9424
95
95
  dstack/_internal/core/backends/datacrunch/configurator.py,sha256=9eG3p9LIp5M45T7WH60q8YwH9cNlzz5l_DSRcugO45I,2564
96
96
  dstack/_internal/core/backends/datacrunch/models.py,sha256=QeadH8qmcK3oDY9DfQKmX65fDGQo6FABLQAe9wQsHr8,1194
97
97
  dstack/_internal/core/backends/digitalocean/__init__.py,sha256=BPjTlv6iNDgu2mcsaIh0FEi9T8iwCEEIVbJQYJAa0gY,34
@@ -109,23 +109,23 @@ dstack/_internal/core/backends/dstack/models.py,sha256=Jbe0Syez43N5i97TlIc8l-5Vn
109
109
  dstack/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
110
  dstack/_internal/core/backends/gcp/auth.py,sha256=VWCn34hapaZ3E0OHCoiAVL97o3s64RF9w85CZ6xdtmk,2235
111
111
  dstack/_internal/core/backends/gcp/backend.py,sha256=OvTv1c7j4LTPCIEtkwD3-q6Eo1QET8xlM8CzbY0hLmI,572
112
- dstack/_internal/core/backends/gcp/compute.py,sha256=s9LAKTZre3vwE_mbmxcJgZF_MuN_Cll29jTxytf8lew,45699
112
+ dstack/_internal/core/backends/gcp/compute.py,sha256=ebax_Yqs0zlDYeYwRtz1tlL0sNZKWM0ieyQNFBA7nbg,51364
113
113
  dstack/_internal/core/backends/gcp/configurator.py,sha256=pA3o5--gKBMLXvlAUIgBL30ayeUBWsLS-xqMljIlzAM,6887
114
- dstack/_internal/core/backends/gcp/models.py,sha256=yFDmg0hazPb2INWnjN4YWtAM3sMV4-Tt0VuSwFZMVm8,5257
115
- dstack/_internal/core/backends/gcp/resources.py,sha256=D8iWWOQYMXNW0emksyGGrHMv5QiK8N2fMFsS43_xxn8,17603
114
+ dstack/_internal/core/backends/gcp/models.py,sha256=1g3U1zktb6RkWag7EPcAoSZejkf5lUrMlpos0_WUEus,5489
115
+ dstack/_internal/core/backends/gcp/resources.py,sha256=a_WlJkDIIlyKd9eSbeHNaAwAo1ZxLHkDUYn4-K_3u_Q,21077
116
116
  dstack/_internal/core/backends/gcp/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  dstack/_internal/core/backends/gcp/features/tcpx.py,sha256=8bDR5kwF5qke5EWNdBscdbZQnC7oVXKSls3WPcoXgZI,2902
118
118
  dstack/_internal/core/backends/hotaisle/__init__.py,sha256=CYMaS1jd9Km0Y6Jvg4ePjYOtfqL9swGsRo5kcXGFrFQ,30
119
119
  dstack/_internal/core/backends/hotaisle/api_client.py,sha256=Fd1TOg4_orwQyJtoZ657zJweLeBhzj_9ObfL538S5uI,3640
120
120
  dstack/_internal/core/backends/hotaisle/backend.py,sha256=o0cqLIKGcrXhvksHHGvjCpLShoQxT2IKdJy9sm0H9gE,586
121
- dstack/_internal/core/backends/hotaisle/compute.py,sha256=X9XbIatbFH5wqLoSH3Z9nNOhBMrXnVVayFn6xi4zu-g,8224
121
+ dstack/_internal/core/backends/hotaisle/compute.py,sha256=uVzNuSBaXe3ieG5pWTcKzDv5gAr2_g7oKczkiVL_06c,8561
122
122
  dstack/_internal/core/backends/hotaisle/configurator.py,sha256=EJwdKFfC0ab0pe4lzeV65b80Ok21rR0OfupOmuqCp6c,2287
123
123
  dstack/_internal/core/backends/hotaisle/models.py,sha256=CmJ20SbpKzFldX7rrR0CpVytSJSN2YWKQ3Ixnta_A1M,1334
124
124
  dstack/_internal/core/backends/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  dstack/_internal/core/backends/kubernetes/backend.py,sha256=Jy0_Nwn6Oro8McJIo_QeNxxq4Pmwsd7JPd5_YE8Fz9U,606
126
- dstack/_internal/core/backends/kubernetes/compute.py,sha256=7xVdo2HK-dTZjkQQtuIfiTXLhBSzhUO0BomZBaPG5UM,34989
126
+ dstack/_internal/core/backends/kubernetes/compute.py,sha256=oFO_RSbxTTajTrDhEgcOqjqmyGmhplKssqIe-mdeTgA,38259
127
127
  dstack/_internal/core/backends/kubernetes/configurator.py,sha256=RK8_eznv1AFrcG3fM-KIxyolsaJ8UTBAO7c3P3RCBnw,2228
128
- dstack/_internal/core/backends/kubernetes/models.py,sha256=vGOhRYP4OzhF62BN5bfRGd4E2tKPaqdlZY8tMmjZoJ0,2308
128
+ dstack/_internal/core/backends/kubernetes/models.py,sha256=wsUfBfQaTSq79KwkNmkzS1E4wVA4fO0k_xxlAYxIxBc,2466
129
129
  dstack/_internal/core/backends/kubernetes/utils.py,sha256=1DkkL_VWShFFqN-Crh0ddebRyXXyL435FyrjVkFLR1Q,6286
130
130
  dstack/_internal/core/backends/lambdalabs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
131
  dstack/_internal/core/backends/lambdalabs/api_client.py,sha256=WaBO7VrPB4kbMQJDxjFxx0HEtAoSncQvH-cahWnVxx4,2688
@@ -138,7 +138,7 @@ dstack/_internal/core/backends/local/backend.py,sha256=KJuNXUXrg60NhLywnExD1EXH2
138
138
  dstack/_internal/core/backends/local/compute.py,sha256=tWNsKGKYlPx9yeqwlpAL_XExOYMPLcb6AsGAji3YO3M,3825
139
139
  dstack/_internal/core/backends/nebius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  dstack/_internal/core/backends/nebius/backend.py,sha256=2XqZIbSR8VzlfOnuVklXlDxNmwAkQj7txQN8VXF1j2E,566
141
- dstack/_internal/core/backends/nebius/compute.py,sha256=US5W8Q0UT09huQybDTBLVE2EDpRG3UdMqq1DZFFaCI4,15454
141
+ dstack/_internal/core/backends/nebius/compute.py,sha256=CzcNNbBsrIA15_Dpb0ubBBEk8r_RONubSLHw5CGxEU4,15443
142
142
  dstack/_internal/core/backends/nebius/configurator.py,sha256=eybolJi5rlEeU8GBXC7pdOU7To32ASQGHDAiE2cNeFo,3794
143
143
  dstack/_internal/core/backends/nebius/fabrics.py,sha256=-X-nSPV2pUin2PAYDHGm-j14KPboIFRpLi93PKHUXTM,1616
144
144
  dstack/_internal/core/backends/nebius/models.py,sha256=OSiUANBf893Xdm7-4WDoPfmd3YFk5-oRjdXiWUjvDdk,6194
@@ -146,7 +146,7 @@ dstack/_internal/core/backends/nebius/resources.py,sha256=MVyMaS0-mZu2g-tJ4HF7Gi
146
146
  dstack/_internal/core/backends/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
147
  dstack/_internal/core/backends/oci/auth.py,sha256=8Cr18y_LOsyRP-16yfFpT70Cofpm0clB3KawS_7aRl4,717
148
148
  dstack/_internal/core/backends/oci/backend.py,sha256=yXjVCt7n6BVLH0byYFbNFf-P9J0FwlNfxsYbKGMdoI4,536
149
- dstack/_internal/core/backends/oci/compute.py,sha256=WGXWmSAUyPqw7Py4DDXDaOUAMCHbqjoJzyou5EXp1bA,7801
149
+ dstack/_internal/core/backends/oci/compute.py,sha256=4uf5myQoLe_z6gK59rY2YJXqUga9J1ZxrGayp_ZufWo,7790
150
150
  dstack/_internal/core/backends/oci/configurator.py,sha256=_mi093BzV8Xdfw81wkiqoY5d5x4CCCtni7J01CZeDCQ,5768
151
151
  dstack/_internal/core/backends/oci/exceptions.py,sha256=GxlUf7itcAQgY3m-U2ul_ZXzfUOcEcPEmisWFaoWSkA,288
152
152
  dstack/_internal/core/backends/oci/models.py,sha256=fDlY7-A0WDQeiwJzwrQl6D5ENOc-677Bz8LXyvBvF0c,2969
@@ -155,7 +155,7 @@ dstack/_internal/core/backends/oci/resources.py,sha256=-47u2vWvRnpNQmgz3A12vu1hS
155
155
  dstack/_internal/core/backends/runpod/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
156
  dstack/_internal/core/backends/runpod/api_client.py,sha256=Oet7CwQTu3sE57unqh-JvuMCBDEDPruAbGB4GyM0dM4,13427
157
157
  dstack/_internal/core/backends/runpod/backend.py,sha256=GcLbySsGY29ZGHXSqTXCxUUoTK9pxVScKly0_fkNr8c,566
158
- dstack/_internal/core/backends/runpod/compute.py,sha256=ryPUmZ50-iiYHxSvSexs1p3eJFzltrJqNksF4VYMrZo,11056
158
+ dstack/_internal/core/backends/runpod/compute.py,sha256=0KwqTfvjNxZXkHS_Y8fYDMHMzL_vo-bxXg00djUIJRo,11097
159
159
  dstack/_internal/core/backends/runpod/configurator.py,sha256=ZcDKN5ulmFMjSy9TlnV-2qxqPwTZUpIwfVwtShZL5fU,2242
160
160
  dstack/_internal/core/backends/runpod/models.py,sha256=W3nO4sjvvWtfKYDZDVJ8oBSsgeGdSR-Z_PD7OpfDBgY,1466
161
161
  dstack/_internal/core/backends/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -168,8 +168,8 @@ dstack/_internal/core/backends/tensordock/models.py,sha256=Dov-XsJcgOWML8c_jPpzo
168
168
  dstack/_internal/core/backends/vastai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
169
  dstack/_internal/core/backends/vastai/api_client.py,sha256=b-qgx352lnxhBXichJtURFGxR7Jd9JYx4WXaxYV-HH0,4940
170
170
  dstack/_internal/core/backends/vastai/backend.py,sha256=NawGHNYVmgNwL8HruEA84rimnpeSyXccdJXr6Dr95UY,566
171
- dstack/_internal/core/backends/vastai/compute.py,sha256=X4nkJUCGB55W2FvqKpQcIPV73s22xviDSBREd4LmPCI,4991
172
- dstack/_internal/core/backends/vastai/configurator.py,sha256=rFeUdlGiBw8PsB_zgBLm-p2pzHdyN8cSATHFLzeKhrg,2408
171
+ dstack/_internal/core/backends/vastai/compute.py,sha256=QTmkIQHUDCatvOHn_iHQV_3CQqcTIkuYYz0s7p_0kpc,5094
172
+ dstack/_internal/core/backends/vastai/configurator.py,sha256=p2Np34TtkhgGZX6e-jLPg6tP8Za-rO9UpgOzp3YGlOA,2339
173
173
  dstack/_internal/core/backends/vastai/models.py,sha256=2xpFE-ouYUBienxZXam2Mo4dy9enSv-FuVJXeYnjVLk,1036
174
174
  dstack/_internal/core/backends/vultr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
175
  dstack/_internal/core/backends/vultr/api_client.py,sha256=isHbdBQr2hFRYTcnTsGxSlWIKYrpC1X_gjSZjGxUupE,4363
@@ -190,22 +190,22 @@ dstack/_internal/core/models/config.py,sha256=VYfgyWG2kfGhJxkC48vZDCbHahIEnO05mD
190
190
  dstack/_internal/core/models/configurations.py,sha256=G0MO8iKR1uRQABWuB_biglZQTCqLBK3vhxIKwJKEsTg,30998
191
191
  dstack/_internal/core/models/envs.py,sha256=yq84YRFBILOy4x3XnGcTgYpbZ69eFTCQPgBCr9Ndov4,4969
192
192
  dstack/_internal/core/models/files.py,sha256=CI1AQN07ACot_6RVkG7qLml07Ro0co2hGsAfcTamn3Y,1977
193
- dstack/_internal/core/models/fleets.py,sha256=FXwILyyemijNrhUPgJvgwZlKpjsX7OGbPIHnjg_3iXk,15192
193
+ dstack/_internal/core/models/fleets.py,sha256=Ux-RSdoJUFF4lSDPH70MJKoav_xYv0w9Ou_BwOJevq0,15215
194
194
  dstack/_internal/core/models/gateways.py,sha256=_O8EWwHWLdgNoWY4P4u71KM-uEr5DDp42LXfyv1qMDI,4054
195
195
  dstack/_internal/core/models/health.py,sha256=Q0Z5pYbW-rD5wLn3-EDre2Q7X6tX7DFaglKz5SDv18U,570
196
196
  dstack/_internal/core/models/instances.py,sha256=Gpv46fu3uWO-3f8w1A6rBzU5dYhmO_wWh9s8fvnd9iw,6872
197
197
  dstack/_internal/core/models/logs.py,sha256=VOsgEsvUIRNNHivD6OZnPZNC52ioqafv7ccdnFQ1YI8,529
198
198
  dstack/_internal/core/models/metrics.py,sha256=Xb8hCXUL-ncQ3PMsErIUAJTe9gwh5jyrQ4UQoZbibsc,269
199
199
  dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7VSAtR_xoFvPVM,720
200
- dstack/_internal/core/models/profiles.py,sha256=YW7XeztKBnVCptvUyR8-E-dbB06nu9GIqwLvmtHgSms,14501
200
+ dstack/_internal/core/models/profiles.py,sha256=vzGQllBGepTcFotgpot6OksyBIM03IJWtW3kZEfkro4,14524
201
201
  dstack/_internal/core/models/projects.py,sha256=hOZoL85q-873vT_Aw7FhzpS6DGVt0Y3yT8kpElrLFto,833
202
202
  dstack/_internal/core/models/resources.py,sha256=-dLupzud5BSqxNABBjLVYTCKekbr9_mhaNGD1ZWBjgM,14544
203
- dstack/_internal/core/models/runs.py,sha256=ehGSyCSx5OAaEqCEd2YvCRiP_uewUeDOHbJGSocu6w0,22609
203
+ dstack/_internal/core/models/runs.py,sha256=UZd2iJNgeRBrX6eHleHXjgpEzvCCxzfZKECAA5M_Vrk,22688
204
204
  dstack/_internal/core/models/secrets.py,sha256=5T4B4eCeZmVQ8t22qYYlm4NUyX7VloiXCJuyDfE92QA,413
205
205
  dstack/_internal/core/models/server.py,sha256=Hkc1v2s3KOiwslsWVmhUOAzcSeREoG-HD1SzSX9WUGg,152
206
206
  dstack/_internal/core/models/services.py,sha256=2Hpi7j0Q1shaf_0wd0C0044AJAmuYi-D3qx3PH849oI,3076
207
207
  dstack/_internal/core/models/unix.py,sha256=KxnSQELnkAjjuUgYcQKVkf-UAbYREBD8WCWDvHfOkuA,1915
208
- dstack/_internal/core/models/users.py,sha256=o_rd0GAmd6jufypVUs9P12NRri3rgAPDt-KxnqNNsGw,703
208
+ dstack/_internal/core/models/users.py,sha256=uG1NUUT51uUYl_YIMi_QVpSdFXgUaGmplk-h2FEgleA,942
209
209
  dstack/_internal/core/models/volumes.py,sha256=PeEHM71aG8SMgMaCM8NyvIBKiufHYyb7CzIRGNgK_HY,7289
210
210
  dstack/_internal/core/models/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
211
211
  dstack/_internal/core/models/backends/base.py,sha256=OVy1zqYVX9C_XZpo2g3SHfKAXOpDzUf6ktxZb34TdLM,1400
@@ -220,7 +220,7 @@ dstack/_internal/core/services/diff.py,sha256=xtJzlSLIw9pnECpMQTy-a2zcfnSd4Q9qi_
220
220
  dstack/_internal/core/services/logs.py,sha256=7_eJdH4MD-3rVb4A6rIJfjj_p4jzUOCmjRVlPD-UDsg,2166
221
221
  dstack/_internal/core/services/profiles.py,sha256=ZFY6VILW6urm6l3u6xpORJ2z48eGJ2jcmRgjVrxr2tw,1612
222
222
  dstack/_internal/core/services/repos.py,sha256=Lw-4MXFBaE_BogRgtYra1H3KPkRGeVWoIfU8hTyJ7GM,10552
223
- dstack/_internal/core/services/configs/__init__.py,sha256=jMAHvZphEgZJldEiQhkaNSW8lVrVAxuYbu9RtLysUGU,5645
223
+ dstack/_internal/core/services/configs/__init__.py,sha256=FW_A4TprMuY1PA_nOoAJNQpkoq3_hKPpORdic2NzCHM,5682
224
224
  dstack/_internal/core/services/ssh/__init__.py,sha256=UhgC3Lv3CPSGqSPEQZIKOfLKUlCFnaB0uqPQhfKCFt0,878
225
225
  dstack/_internal/core/services/ssh/attach.py,sha256=6YZ_HaimKrjdLzcDLksGi0_9rlVyLeBgPmmWHC7dYxo,9096
226
226
  dstack/_internal/core/services/ssh/client.py,sha256=FUg74jNOagYR3OKuWMBwNgJWIDwHfYrIMSER8xn92D8,4102
@@ -284,7 +284,7 @@ dstack/_internal/server/app.py,sha256=BdjpR_XsTMkNey85ZwTjKd9_KKbtlePnIqy7QQDQdq
284
284
  dstack/_internal/server/db.py,sha256=NY0-K_7ok2OYLtPMeZ4EHlHK5N2a77uj4aJCVgWO2qE,3245
285
285
  dstack/_internal/server/deps.py,sha256=31e8SU_ogPJWHIDLkgl7cuC_5V91xbJoLyAj17VanfM,670
286
286
  dstack/_internal/server/main.py,sha256=kztKhCYNoHSDyJJQScWfZXE0naNleJOCQULW6dd8SGw,109
287
- dstack/_internal/server/models.py,sha256=mpQYS1hELiopZLlxF8rVMs4K5yF1zGBFnc1DHgE1BBQ,34213
287
+ dstack/_internal/server/models.py,sha256=SXqbr4TRmGbr5WDR-MRza-sxkTvDnfh4i2uTg2y_Pcs,34373
288
288
  dstack/_internal/server/settings.py,sha256=7SRzSlTnUPNNjlZH-vpgwbwj95gI-LLtQite8LQnaTU,7418
289
289
  dstack/_internal/server/background/__init__.py,sha256=QftEjgQZffu83sY-F0WL65vRp28FbBEtezfowQYcTv4,5606
290
290
  dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -292,12 +292,12 @@ dstack/_internal/server/background/tasks/common.py,sha256=n87hFjDNtS2x8mYbBnKLqh
292
292
  dstack/_internal/server/background/tasks/process_fleets.py,sha256=0i_S3HCZp4AjQjER7j_pvIm22eYbrBwZnt9-0kgsq3E,11547
293
293
  dstack/_internal/server/background/tasks/process_gateways.py,sha256=FH9RY3Tfmtw_UctCdYZDIRb2rgtmHdxTg6Oc4IBiDBA,8356
294
294
  dstack/_internal/server/background/tasks/process_idle_volumes.py,sha256=mqnl8wvWaKTYvJMbgFJbOP-bZMRQG2vrhUnaNcyBldE,5223
295
- dstack/_internal/server/background/tasks/process_instances.py,sha256=IeKl28NSC-va5QABW0PC3eDGU6r-Xz1TNuSK2EtIX08,44007
295
+ dstack/_internal/server/background/tasks/process_instances.py,sha256=kDqtfqWoSS91qW0NpVftxrr8Z2tDv6Fj2cfbjvgHY3o,44196
296
296
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=yKXe9J7m3oleK0C-oGJaYNkcPT8kqkz0nw-A7xqYbjE,6390
297
297
  dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=lgYIzjHG9EITK31yG6uQjlIcSwW5jsP9ZOBBZqW_eNs,4263
298
298
  dstack/_internal/server/background/tasks/process_probes.py,sha256=dmug-_rmYiVLLF-imto-Ju1gPtENvHvCjHyilqgYuJw,6457
299
299
  dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=_UZm37FVV4rhdd0So7HtcKbIgrSdAr5Vx-Uen_xizec,5459
300
- dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=IoQi7mm4upEZgujTkWYrXDKrC5rSZ5Q4_jAR4OpajaM,44973
300
+ dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=ZSx8hQX3XFHetaJT78A9W0mSzTIsY5NgMrSD6gb0Mmw,45029
301
301
  dstack/_internal/server/background/tasks/process_runs.py,sha256=K4km4XT0JYUf6JYbpKbEAyumUDBT21lqcMFTQ7pIsoY,25200
302
302
  dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=fDuLfnSJqWDL2oPrxXQMkaqKgplMdKT0SRD_AyB4n-0,43099
303
303
  dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=S7ZSDVMX-N0XMaMgwFa1QG_RAi48BP432s9AqHw4PMM,4066
@@ -385,6 +385,7 @@ dstack/_internal/server/migrations/versions/ea60480f82bb_add_membermodel_member_
385
385
  dstack/_internal/server/migrations/versions/ec02a26a256c_add_runmodel_next_triggered_at.py,sha256=YeEeTHYqh5i5ycO3ExZhCWc16iC--JuRtVcDRu2RJ9Q,962
386
386
  dstack/_internal/server/migrations/versions/ed0ca30e13bb_migrate_instancestatus_provisioning.py,sha256=YhXQ9ApeMB8grDjNcbnXQKHYPlIJB7QlvE1R1nM5_6k,689
387
387
  dstack/_internal/server/migrations/versions/fe72c4de8376_add_gateways.py,sha256=1-0e060NDpgYQhoKDmHWednANk1cZzMdVns7sEo5Lwo,2730
388
+ dstack/_internal/server/migrations/versions/ff1d94f65b08_user_ssh_key.py,sha256=5KMHvhQ95OciKRqygHd4ylVwJJaZZynPOwWRrava5is,944
388
389
  dstack/_internal/server/migrations/versions/ffa99edd1988_add_jobterminationreason_max_duration_.py,sha256=1wBIisgN25doZfAErnqyshoSSzoDHPt4nZfC2MmSWak,2324
389
390
  dstack/_internal/server/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
390
391
  dstack/_internal/server/routers/backends.py,sha256=MgAZJV7QezgmoB0UqnEJIUrqYWqOFwMFGImFkHHrjoI,4922
@@ -398,10 +399,10 @@ dstack/_internal/server/routers/metrics.py,sha256=iXLbcJuwdi5F-lfkPhl9RzvC2m8FSp
398
399
  dstack/_internal/server/routers/projects.py,sha256=qTwISp2O5L3zoysPyikH_IIqZSTkriUFOvrQPP_PCsQ,4915
399
400
  dstack/_internal/server/routers/prometheus.py,sha256=INRxPLYVJ6CTm2AwtSJ1z455RiCOpPJ3rbXMKGonGm8,1109
400
401
  dstack/_internal/server/routers/repos.py,sha256=4pTInkm0XaOVUJ2pRnbc8LqTyACkE3w_BrB6icT7EUw,4039
401
- dstack/_internal/server/routers/runs.py,sha256=SoRmFN4NcUk5X2B6sUmLtNfjtSJU_MEM9WnnihimAA8,5809
402
+ dstack/_internal/server/routers/runs.py,sha256=m_IQMCeqh5Tp3OP7ulaBb1IND8b-ixqbVNiHgZtXrDo,6121
402
403
  dstack/_internal/server/routers/secrets.py,sha256=wWYUQbYcfWenUVEA4qdb08J7_6H3zmW3AsTIg-UTJ4o,2566
403
404
  dstack/_internal/server/routers/server.py,sha256=MSOsOCyA0unv24nCs_OkJG_zHyuldQrONn2xaZjGOXo,474
404
- dstack/_internal/server/routers/users.py,sha256=spCgzSQJbXPq7MUm1A_4PnFSwJ3BAtsRfYSGkjCeLgo,3468
405
+ dstack/_internal/server/routers/users.py,sha256=AkpE5DZgk6uukhbtlQIj40Sg7_npD9HrMfU87SlMMsE,3935
405
406
  dstack/_internal/server/routers/volumes.py,sha256=PHmayi432nUAdcOiGOu1j2bfbIxCFjc8u4XRTrBiHEI,3856
406
407
  dstack/_internal/server/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
407
408
  dstack/_internal/server/schemas/backends.py,sha256=KC6ZunAW71OCEIE_LnPO-wScJKVFXLgcVVocrLATMi0,365
@@ -441,10 +442,10 @@ dstack/_internal/server/services/probes.py,sha256=pdgtkOvBuvneUo4Gysg8_afibTf1wu
441
442
  dstack/_internal/server/services/projects.py,sha256=PZdMCi1PVu68c_rYfwJRk7hgM6ddkekxlG_IU_957QI,25276
442
443
  dstack/_internal/server/services/repos.py,sha256=ECl1cbpdzhTv1P3Y9IQmoWyHHF8iXFyL4s2drfwRDvg,9352
443
444
  dstack/_internal/server/services/resources.py,sha256=VRFOih_cMJdc0c2m9nSGsX8vWAJQV3M6N87aqS_JXfw,699
444
- dstack/_internal/server/services/runs.py,sha256=cZPyGTR7_7l88XAbqXep-P7xcGOCHZhLrIj9ua4z1Bs,47818
445
+ dstack/_internal/server/services/runs.py,sha256=v4CwgaRd8AK4KJ0D4qcHC56FFsRHKvwVP7GHOunQ_dM,48088
445
446
  dstack/_internal/server/services/secrets.py,sha256=M7RS4X1-DIL0f7m6BBb3PhsrAbxwKUD3_pZEWRfR3sM,5567
446
447
  dstack/_internal/server/services/ssh.py,sha256=DT7U_8ON8o30-53WlJwjd5kVrKyt4KPgKeN63NW3P8U,2883
447
- dstack/_internal/server/services/users.py,sha256=L-COF4RjtwYSfnkGQefrSiEU0haTv0o1P2OuUdvMK8E,7378
448
+ dstack/_internal/server/services/users.py,sha256=CFPACnLatZnqVU8Gdj_fMpeF8LTHB_30rv-LhYlDWAk,8663
448
449
  dstack/_internal/server/services/volumes.py,sha256=DBGIUsysAO7sQ6vb4mjhzO9XLdyQvtNujucxhGnkSsU,16682
449
450
  dstack/_internal/server/services/backends/__init__.py,sha256=xWHI-A24u9RE7H5I4A3e_JQyuQtp5pdKbU--ZyizrnU,13420
450
451
  dstack/_internal/server/services/backends/handlers.py,sha256=Rz4QjqmmDGDzn6QbwxlJvV5oC6pE4PZN3FX0DVqnBHc,3539
@@ -520,11 +521,11 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
520
521
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
521
522
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
522
523
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
523
- dstack/_internal/server/statics/index.html,sha256=zv7wlS5mh2aAps7sEhXTlCwp0UOsiqhsMiIEOhLxt2Q,11155
524
+ dstack/_internal/server/statics/index.html,sha256=T9ZlkECfVpgoCT7hGM81NvPmAz32YSNSq2RfA2D5als,11155
524
525
  dstack/_internal/server/statics/logo-notext.svg,sha256=Oth7XfcAeDJcaPdzNtDaqYuLU7mCB0JqNtxeyWb6Z3c,11231
525
- dstack/_internal/server/statics/main-56191fbfe77f49b251de.css,sha256=1exsufAv8oyw_4fbdcDJ7CtyRdWFyf-Boxua8HiK81c,1456319
526
- dstack/_internal/server/statics/main-c51afa7f243e24d3e446.js,sha256=StRTIpOyv0Wt1fPh6XtuUiRQx5dRsDsXDNrNCbp1PPg,6928035
527
- dstack/_internal/server/statics/main-c51afa7f243e24d3e446.js.map,sha256=gKw2zgeA1icax9QkCOX5jfYFPGe60omyZDRZCrdPtgo,9190078
526
+ dstack/_internal/server/statics/main-720ce3a11140daa480cc.css,sha256=phgVgWaKKHEWgAux1if7DRn6sM_ykbdu9OPcuiflezg,1473211
527
+ dstack/_internal/server/statics/main-97c7e184573ca23f9fe4.js,sha256=LdT0_PaR1s7SsP_0SIbzkaM42h4Cs_BHksQXiRq-4AQ,7111664
528
+ dstack/_internal/server/statics/main-97c7e184573ca23f9fe4.js.map,sha256=-5MY6B04RIHgL-pufWYPqng9uYNyi_s64kRihkK6j6k,9461080
528
529
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
529
530
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
530
531
  dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
@@ -633,10 +634,10 @@ dstack/_internal/utils/tags.py,sha256=Gx4aZM85E_UUCGuFZbCEFxHB5DNgrtJP15_1tFFEd1
633
634
  dstack/_internal/utils/typing.py,sha256=tHrhtkr3G6jkk-_FZyobdjLYvP5_YIgXbKsN-13dfvg,386
634
635
  dstack/api/__init__.py,sha256=7qbG42qEHMyNDFRCz9FgfuimAKws3hV8eMXs6oRgh5c,1607
635
636
  dstack/api/utils.py,sha256=_la3CRk1vgrPGkInPI1SOr33e8Jvh8ziJC32fjvKnaU,4188
636
- dstack/api/_public/__init__.py,sha256=mbzsdV3nWUJRksc7czX5C0iPT3NA6YRpriQQRiXwIbY,3429
637
+ dstack/api/_public/__init__.py,sha256=eb6mmLtoF-Zq-od0F1Nz3IsMQ6IHmZcv7lfvgyE8rho,3223
637
638
  dstack/api/_public/backends.py,sha256=w_cIUVU3L1tN8VoPH6-ltq-oJewlfXWTiEFXfDvm-1Q,1056
638
- dstack/api/_public/repos.py,sha256=N6cvsey2jjVIu1D0SSCEnVOgm37YflzUtyAKdYUm_8U,8281
639
- dstack/api/_public/runs.py,sha256=tHWK7_dylmCVbdA8ZVA0F3GH09oENozqZ5910vAo8Jw,32020
639
+ dstack/api/_public/repos.py,sha256=99tzFSFOQejLQIfMlzoGlR3ZzLRs42pIvpkzkgwkyhQ,7464
640
+ dstack/api/_public/runs.py,sha256=z3dMCcN7Kpdk7lWjXF6PPkJWhGxLgYQ6WBKii0gIvt8,34784
640
641
  dstack/api/server/__init__.py,sha256=6hr2scrtZ1LsH_VQ7TRYlKoOykL1wsSnDb6ZzMZ1T_U,6712
641
642
  dstack/api/server/_backends.py,sha256=tSvJ4j-yp-S-4IYo7pKHluDaSsx6Xbwo08Ff6Do85fo,1639
642
643
  dstack/api/server/_files.py,sha256=iOBHm1CvJiG4TqNx3t5LYOf7w3jff9I15wxYpIAg-r4,780
@@ -650,7 +651,7 @@ dstack/api/server/_projects.py,sha256=1nlsm7CRaTKqaUX93un8BY845YWEuxXFGrwg3IJvGN
650
651
  dstack/api/server/_repos.py,sha256=wL2hXLid6ktF3OPyGDomXXfKg8OE_bnbnJVhMeI77z8,2425
651
652
  dstack/api/server/_runs.py,sha256=cOAk4Y3YALTgV-PumGbHTylTaOjwD-JpnEcT7CrmQHY,3369
652
653
  dstack/api/server/_secrets.py,sha256=YN6smkAb1vj8jG5KKeEEEjAM1KL880bfBLlrTzGcUu4,1366
653
- dstack/api/server/_users.py,sha256=XzhgGKc5Tsr0-xkz3T6rGyWZ1tO7aYNhLux2eE7dAoY,1738
654
+ dstack/api/server/_users.py,sha256=0BYysRfZSyds2qE93KqkWSPOiSv9BbbeGVAVd4hZDyQ,2293
654
655
  dstack/api/server/_volumes.py,sha256=dL_DS0edjdXnW8vIjdDpxHhRMBdHAjjnyUhRFvQd0sE,1523
655
656
  dstack/api/server/utils.py,sha256=i1KX4CNXVeDj9CnytdzsJz0bxjvvfLRTb7xw8oqtEtQ,1040
656
657
  dstack/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -662,8 +663,8 @@ dstack/plugins/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
662
663
  dstack/plugins/builtin/rest_plugin/__init__.py,sha256=lgTsq8Z6Km2F2UhPRChVB4vDM5ZpWtdk1iB1aa20ypA,440
663
664
  dstack/plugins/builtin/rest_plugin/_models.py,sha256=9hgVuU6OGSxidar88XhQnNo9izYWeQvVH45ciErv-Es,1910
664
665
  dstack/plugins/builtin/rest_plugin/_plugin.py,sha256=h3r3Yc3h22i93fifPTgTm9Oojd1sN1O4DP7ZTV-kWpM,5386
665
- dstack-0.19.32.dist-info/METADATA,sha256=R_c6-NfPoaFBeuJVdHTD6dENAKZZsBo_syd6wCdiJ6M,20834
666
- dstack-0.19.32.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
667
- dstack-0.19.32.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
668
- dstack-0.19.32.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
669
- dstack-0.19.32.dist-info/RECORD,,
666
+ dstack-0.19.33.dist-info/METADATA,sha256=VjbOSIJ8_gtS7_uBG0v3m34l7ql13RGAoGgaSZ1Wuf0,20835
667
+ dstack-0.19.33.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
668
+ dstack-0.19.33.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
669
+ dstack-0.19.33.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
670
+ dstack-0.19.33.dist-info/RECORD,,