dstack 0.19.27__py3-none-any.whl → 0.19.29__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 (74) hide show
  1. dstack/_internal/cli/commands/__init__.py +11 -8
  2. dstack/_internal/cli/commands/apply.py +6 -3
  3. dstack/_internal/cli/commands/completion.py +3 -1
  4. dstack/_internal/cli/commands/config.py +1 -0
  5. dstack/_internal/cli/commands/init.py +2 -2
  6. dstack/_internal/cli/commands/offer.py +1 -1
  7. dstack/_internal/cli/commands/project.py +1 -0
  8. dstack/_internal/cli/commands/server.py +2 -2
  9. dstack/_internal/cli/main.py +1 -1
  10. dstack/_internal/cli/services/configurators/base.py +2 -4
  11. dstack/_internal/cli/services/configurators/fleet.py +4 -5
  12. dstack/_internal/cli/services/configurators/gateway.py +3 -5
  13. dstack/_internal/cli/services/configurators/run.py +51 -27
  14. dstack/_internal/cli/services/configurators/volume.py +3 -5
  15. dstack/_internal/core/backends/aws/compute.py +51 -36
  16. dstack/_internal/core/backends/azure/compute.py +10 -7
  17. dstack/_internal/core/backends/base/compute.py +96 -14
  18. dstack/_internal/core/backends/base/offers.py +34 -4
  19. dstack/_internal/core/backends/cloudrift/compute.py +5 -7
  20. dstack/_internal/core/backends/cudo/compute.py +4 -2
  21. dstack/_internal/core/backends/datacrunch/compute.py +13 -11
  22. dstack/_internal/core/backends/digitalocean_base/compute.py +4 -5
  23. dstack/_internal/core/backends/gcp/compute.py +12 -7
  24. dstack/_internal/core/backends/hotaisle/compute.py +4 -7
  25. dstack/_internal/core/backends/kubernetes/compute.py +6 -4
  26. dstack/_internal/core/backends/lambdalabs/compute.py +4 -5
  27. dstack/_internal/core/backends/local/compute.py +1 -3
  28. dstack/_internal/core/backends/nebius/compute.py +10 -7
  29. dstack/_internal/core/backends/oci/compute.py +10 -7
  30. dstack/_internal/core/backends/runpod/compute.py +15 -6
  31. dstack/_internal/core/backends/template/compute.py.jinja +3 -1
  32. dstack/_internal/core/backends/tensordock/compute.py +1 -3
  33. dstack/_internal/core/backends/tensordock/models.py +2 -0
  34. dstack/_internal/core/backends/vastai/compute.py +7 -3
  35. dstack/_internal/core/backends/vultr/compute.py +5 -5
  36. dstack/_internal/core/compatibility/runs.py +2 -0
  37. dstack/_internal/core/models/common.py +67 -43
  38. dstack/_internal/core/models/configurations.py +88 -62
  39. dstack/_internal/core/models/fleets.py +41 -24
  40. dstack/_internal/core/models/instances.py +5 -5
  41. dstack/_internal/core/models/profiles.py +66 -47
  42. dstack/_internal/core/models/projects.py +8 -0
  43. dstack/_internal/core/models/repos/remote.py +21 -16
  44. dstack/_internal/core/models/resources.py +69 -65
  45. dstack/_internal/core/models/runs.py +17 -9
  46. dstack/_internal/server/app.py +5 -0
  47. dstack/_internal/server/background/tasks/process_fleets.py +8 -0
  48. dstack/_internal/server/background/tasks/process_instances.py +3 -2
  49. dstack/_internal/server/background/tasks/process_submitted_jobs.py +97 -34
  50. dstack/_internal/server/models.py +6 -5
  51. dstack/_internal/server/schemas/gateways.py +10 -9
  52. dstack/_internal/server/services/backends/__init__.py +1 -1
  53. dstack/_internal/server/services/backends/handlers.py +2 -0
  54. dstack/_internal/server/services/docker.py +8 -7
  55. dstack/_internal/server/services/projects.py +63 -4
  56. dstack/_internal/server/services/runs.py +2 -0
  57. dstack/_internal/server/settings.py +46 -0
  58. dstack/_internal/server/statics/index.html +1 -1
  59. dstack/_internal/server/statics/main-56191fbfe77f49b251de.css +3 -0
  60. dstack/_internal/server/statics/{main-4eecc75fbe64067eb1bc.js → main-c51afa7f243e24d3e446.js} +61115 -49101
  61. dstack/_internal/server/statics/{main-4eecc75fbe64067eb1bc.js.map → main-c51afa7f243e24d3e446.js.map} +1 -1
  62. dstack/_internal/utils/env.py +85 -11
  63. dstack/version.py +1 -1
  64. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/METADATA +1 -1
  65. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/RECORD +68 -73
  66. dstack/_internal/core/backends/tensordock/__init__.py +0 -0
  67. dstack/_internal/core/backends/tensordock/api_client.py +0 -104
  68. dstack/_internal/core/backends/tensordock/backend.py +0 -16
  69. dstack/_internal/core/backends/tensordock/configurator.py +0 -74
  70. dstack/_internal/server/statics/main-56191c63d516fd0041c4.css +0 -3
  71. dstack/_internal/server/statics/static/media/github.1f7102513534c83a9d8d735d2b8c12a2.svg +0 -3
  72. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/WHEEL +0 -0
  73. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/entry_points.txt +0 -0
  74. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/licenses/LICENSE.md +0 -0
@@ -1,74 +0,0 @@
1
- import json
2
-
3
- from dstack._internal.core.backends.base.configurator import (
4
- BackendRecord,
5
- Configurator,
6
- raise_invalid_credentials_error,
7
- )
8
- from dstack._internal.core.backends.tensordock import api_client
9
- from dstack._internal.core.backends.tensordock.backend import TensorDockBackend
10
- from dstack._internal.core.backends.tensordock.models import (
11
- TensorDockBackendConfig,
12
- TensorDockBackendConfigWithCreds,
13
- TensorDockConfig,
14
- TensorDockCreds,
15
- TensorDockStoredConfig,
16
- )
17
- from dstack._internal.core.models.backends.base import (
18
- BackendType,
19
- )
20
-
21
- # TensorDock regions are dynamic, currently we don't offer any filtering
22
- REGIONS = []
23
-
24
-
25
- class TensorDockConfigurator(
26
- Configurator[
27
- TensorDockBackendConfig,
28
- TensorDockBackendConfigWithCreds,
29
- ]
30
- ):
31
- TYPE = BackendType.TENSORDOCK
32
- BACKEND_CLASS = TensorDockBackend
33
-
34
- def validate_config(
35
- self, config: TensorDockBackendConfigWithCreds, default_creds_enabled: bool
36
- ):
37
- self._validate_tensordock_creds(config.creds.api_key, config.creds.api_token)
38
-
39
- def create_backend(
40
- self, project_name: str, config: TensorDockBackendConfigWithCreds
41
- ) -> BackendRecord:
42
- if config.regions is None:
43
- config.regions = REGIONS
44
- return BackendRecord(
45
- config=TensorDockStoredConfig(
46
- **TensorDockBackendConfig.__response__.parse_obj(config).dict()
47
- ).json(),
48
- auth=TensorDockCreds.parse_obj(config.creds).json(),
49
- )
50
-
51
- def get_backend_config_with_creds(
52
- self, record: BackendRecord
53
- ) -> TensorDockBackendConfigWithCreds:
54
- config = self._get_config(record)
55
- return TensorDockBackendConfigWithCreds.__response__.parse_obj(config)
56
-
57
- def get_backend_config_without_creds(self, record: BackendRecord) -> TensorDockBackendConfig:
58
- config = self._get_config(record)
59
- return TensorDockBackendConfig.__response__.parse_obj(config)
60
-
61
- def get_backend(self, record: BackendRecord) -> TensorDockBackend:
62
- config = self._get_config(record)
63
- return TensorDockBackend(config=config)
64
-
65
- def _get_config(self, record: BackendRecord) -> TensorDockConfig:
66
- return TensorDockConfig.__response__(
67
- **json.loads(record.config),
68
- creds=TensorDockCreds.parse_raw(record.auth),
69
- )
70
-
71
- def _validate_tensordock_creds(self, api_key: str, api_token: str):
72
- client = api_client.TensorDockAPIClient(api_key=api_key, api_token=api_token)
73
- if not client.auth_test():
74
- raise_invalid_credentials_error(fields=[["creds", "api_key"], ["creds", "api_token"]])