dstack 0.18.42__py3-none-any.whl → 0.18.43__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.
Files changed (80) hide show
  1. dstack/_internal/cli/commands/__init__.py +2 -1
  2. dstack/_internal/cli/commands/apply.py +4 -2
  3. dstack/_internal/cli/commands/attach.py +21 -1
  4. dstack/_internal/cli/commands/completion.py +20 -0
  5. dstack/_internal/cli/commands/delete.py +3 -1
  6. dstack/_internal/cli/commands/fleet.py +2 -1
  7. dstack/_internal/cli/commands/gateway.py +7 -2
  8. dstack/_internal/cli/commands/logs.py +3 -2
  9. dstack/_internal/cli/commands/stats.py +2 -1
  10. dstack/_internal/cli/commands/stop.py +2 -1
  11. dstack/_internal/cli/commands/volume.py +2 -1
  12. dstack/_internal/cli/main.py +6 -0
  13. dstack/_internal/cli/services/completion.py +86 -0
  14. dstack/_internal/cli/services/configurators/run.py +10 -17
  15. dstack/_internal/cli/utils/fleet.py +5 -1
  16. dstack/_internal/core/backends/aws/compute.py +22 -10
  17. dstack/_internal/core/backends/aws/resources.py +3 -3
  18. dstack/_internal/core/backends/azure/compute.py +14 -8
  19. dstack/_internal/core/backends/azure/resources.py +2 -0
  20. dstack/_internal/core/backends/base/compute.py +102 -2
  21. dstack/_internal/core/backends/base/offers.py +7 -1
  22. dstack/_internal/core/backends/cudo/compute.py +8 -4
  23. dstack/_internal/core/backends/datacrunch/compute.py +10 -4
  24. dstack/_internal/core/backends/gcp/auth.py +19 -13
  25. dstack/_internal/core/backends/gcp/compute.py +25 -19
  26. dstack/_internal/core/backends/gcp/resources.py +3 -10
  27. dstack/_internal/core/backends/kubernetes/compute.py +4 -3
  28. dstack/_internal/core/backends/lambdalabs/compute.py +9 -3
  29. dstack/_internal/core/backends/nebius/compute.py +2 -2
  30. dstack/_internal/core/backends/oci/compute.py +10 -4
  31. dstack/_internal/core/backends/runpod/compute.py +11 -4
  32. dstack/_internal/core/backends/tensordock/compute.py +14 -3
  33. dstack/_internal/core/backends/vastai/compute.py +12 -2
  34. dstack/_internal/core/backends/vultr/api_client.py +3 -3
  35. dstack/_internal/core/backends/vultr/compute.py +9 -3
  36. dstack/_internal/core/models/backends/aws.py +2 -0
  37. dstack/_internal/core/models/backends/base.py +1 -0
  38. dstack/_internal/core/models/configurations.py +0 -1
  39. dstack/_internal/core/services/__init__.py +5 -1
  40. dstack/_internal/core/services/configs/__init__.py +3 -0
  41. dstack/_internal/server/background/tasks/common.py +22 -0
  42. dstack/_internal/server/background/tasks/process_instances.py +11 -18
  43. dstack/_internal/server/background/tasks/process_running_jobs.py +9 -16
  44. dstack/_internal/server/background/tasks/process_terminating_jobs.py +1 -7
  45. dstack/_internal/server/routers/logs.py +3 -0
  46. dstack/_internal/server/services/backends/configurators/aws.py +31 -1
  47. dstack/_internal/server/services/backends/configurators/gcp.py +8 -15
  48. dstack/_internal/server/services/config.py +11 -1
  49. dstack/_internal/server/services/jobs/__init__.py +12 -9
  50. dstack/_internal/server/services/jobs/configurators/dev.py +1 -3
  51. dstack/_internal/server/services/jobs/configurators/task.py +1 -3
  52. dstack/_internal/server/services/logs/__init__.py +78 -0
  53. dstack/_internal/server/services/{logs.py → logs/aws.py} +12 -207
  54. dstack/_internal/server/services/logs/base.py +47 -0
  55. dstack/_internal/server/services/logs/filelog.py +110 -0
  56. dstack/_internal/server/services/logs/gcp.py +165 -0
  57. dstack/_internal/server/services/pools.py +16 -17
  58. dstack/_internal/server/services/proxy/routers/service_proxy.py +14 -7
  59. dstack/_internal/server/settings.py +3 -0
  60. dstack/_internal/server/statics/index.html +1 -1
  61. dstack/_internal/server/statics/{main-ad5150a441de98cd8987.css → main-7510e71dfa9749a4e70e.css} +1 -1
  62. dstack/_internal/server/statics/{main-2ac66bfcbd2e39830b88.js → main-fe8fd9db55df8d10e648.js} +66 -66
  63. dstack/_internal/server/statics/{main-2ac66bfcbd2e39830b88.js.map → main-fe8fd9db55df8d10e648.js.map} +1 -1
  64. dstack/_internal/server/testing/common.py +33 -8
  65. dstack/api/_public/runs.py +1 -1
  66. dstack/version.py +2 -2
  67. {dstack-0.18.42.dist-info → dstack-0.18.43.dist-info}/METADATA +4 -3
  68. {dstack-0.18.42.dist-info → dstack-0.18.43.dist-info}/RECORD +80 -71
  69. tests/_internal/core/backends/base/__init__.py +0 -0
  70. tests/_internal/core/backends/base/test_compute.py +56 -0
  71. tests/_internal/server/background/tasks/test_process_running_jobs.py +1 -1
  72. tests/_internal/server/conftest.py +4 -5
  73. tests/_internal/server/routers/test_backends.py +1 -0
  74. tests/_internal/server/routers/test_logs.py +1 -1
  75. tests/_internal/server/routers/test_runs.py +2 -2
  76. tests/_internal/server/services/test_logs.py +3 -3
  77. {dstack-0.18.42.dist-info → dstack-0.18.43.dist-info}/LICENSE.md +0 -0
  78. {dstack-0.18.42.dist-info → dstack-0.18.43.dist-info}/WHEEL +0 -0
  79. {dstack-0.18.42.dist-info → dstack-0.18.43.dist-info}/entry_points.txt +0 -0
  80. {dstack-0.18.42.dist-info → dstack-0.18.43.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,7 @@ from dstack._internal.core.models.configurations import (
16
16
  )
17
17
  from dstack._internal.core.models.envs import Env
18
18
  from dstack._internal.core.models.fleets import FleetConfiguration, FleetSpec, FleetStatus
19
- from dstack._internal.core.models.gateways import GatewayStatus
19
+ from dstack._internal.core.models.gateways import GatewayComputeConfiguration, GatewayStatus
20
20
  from dstack._internal.core.models.instances import (
21
21
  Disk,
22
22
  Gpu,
@@ -420,6 +420,24 @@ async def create_gateway_compute(
420
420
  return gateway_compute
421
421
 
422
422
 
423
+ def get_gateway_compute_configuration(
424
+ project_name: str = "test-project",
425
+ instance_name: str = "test-instance",
426
+ backend: BackendType = BackendType.AWS,
427
+ region: str = "us",
428
+ public_ip: bool = True,
429
+ ) -> GatewayComputeConfiguration:
430
+ return GatewayComputeConfiguration(
431
+ project_name=project_name,
432
+ instance_name=instance_name,
433
+ backend=backend,
434
+ region=region,
435
+ public_ip=public_ip,
436
+ ssh_key_pub="",
437
+ certificate=None,
438
+ )
439
+
440
+
423
441
  async def create_pool(
424
442
  session: AsyncSession,
425
443
  project: ProjectModel,
@@ -533,13 +551,7 @@ async def create_instance(
533
551
  requirements = Requirements(resources=ResourcesSpec(cpu=1))
534
552
 
535
553
  if instance_configuration is None:
536
- instance_configuration = InstanceConfiguration(
537
- project_name="test_proj",
538
- instance_name="test_instance_name",
539
- instance_id="test instance id",
540
- ssh_keys=[],
541
- user="test_user",
542
- )
554
+ instance_configuration = get_instance_configuration()
543
555
 
544
556
  if volumes is None:
545
557
  volumes = []
@@ -581,6 +593,19 @@ async def create_instance(
581
593
  return im
582
594
 
583
595
 
596
+ def get_instance_configuration(
597
+ project_name: str = "test-project",
598
+ instance_name: str = "test-instance",
599
+ user: str = "dstack-user",
600
+ ) -> InstanceConfiguration:
601
+ return InstanceConfiguration(
602
+ project_name=project_name,
603
+ instance_name=instance_name,
604
+ user=user,
605
+ ssh_keys=[],
606
+ )
607
+
608
+
584
609
  def get_instance_offer_with_availability(
585
610
  backend: BackendType = BackendType.AWS,
586
611
  region: str = "eu-west",
@@ -215,7 +215,7 @@ class Run(ABC):
215
215
  start_time=next_start_time,
216
216
  end_time=None,
217
217
  descending=False,
218
- limit=100,
218
+ limit=1000,
219
219
  diagnose=diagnose,
220
220
  ),
221
221
  )
dstack/version.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__ = "0.18.42"
1
+ __version__ = "0.18.43"
2
2
  __is_release__ = True
3
- base_image = "0.6"
3
+ base_image = "0.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dstack
3
- Version: 0.18.42
3
+ Version: 0.18.43
4
4
  Summary: dstack is an open-source orchestration engine for running AI workloads on any cloud or on-premises.
5
5
  Home-page: https://dstack.ai
6
6
  Author: Andrey Cheptsov
@@ -37,7 +37,8 @@ Requires-Dist: websocket-client
37
37
  Requires-Dist: python-multipart>=0.0.16
38
38
  Requires-Dist: filelock
39
39
  Requires-Dist: psutil
40
- Requires-Dist: gpuhunt<0.1.0,>=0.0.19
40
+ Requires-Dist: gpuhunt<0.2.0,>=0.1.0
41
+ Requires-Dist: argcomplete>=3.5.0
41
42
  Provides-Extra: all
42
43
  Requires-Dist: fastapi; extra == "all"
43
44
  Requires-Dist: starlette>=0.26.0; extra == "all"
@@ -307,9 +308,9 @@ for AI workloads both in the cloud and on-prem, speeding up the development, tra
307
308
 
308
309
  ## Major news ✨
309
310
 
311
+ - [2025/02] [dstack 0.18.41: GPU blocks, Proxy jump, inactivity duration, and more](https://github.com/dstackai/dstack/releases/tag/0.18.41)
310
312
  - [2025/01] [dstack 0.18.38: Intel Gaudi](https://github.com/dstackai/dstack/releases/tag/0.18.38)
311
313
  - [2025/01] [dstack 0.18.35: Vultr](https://github.com/dstackai/dstack/releases/tag/0.18.35)
312
- - [2024/12] [dstack 0.18.32: TPU v6e](https://github.com/dstackai/dstack/releases/tag/0.18.32)
313
314
  - [2024/12] [dstack 0.18.30: AWS Capacity Reservations and Capacity Blocks](https://github.com/dstackai/dstack/releases/tag/0.18.30)
314
315
  - [2024/10] [dstack 0.18.21: Instance volumes](https://github.com/dstackai/dstack/releases/tag/0.18.21)
315
316
  - [2024/10] [dstack 0.18.18: Hardware metrics monitoring](https://github.com/dstackai/dstack/releases/tag/0.18.18)
@@ -1,39 +1,41 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=2vyD60hf6Ar7fKjyGNRtiogwJDCRrkoglz7oYuLU-uY,65
2
+ dstack/version.py,sha256=d3JTxTwIqwsUKYkzkrgMvw4t7I2HgxbJ2Bl3oR5u-g4,65
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=8XODoSW2joaEndvZxuHUPSFK85sGgJ7fVL976isYeJM,557
6
6
  dstack/_internal/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- dstack/_internal/cli/main.py,sha256=XBL1ndQgWF3qVFfpoSJvRzT2N3NEwJs_3mhcNn3NRGU,3473
8
- dstack/_internal/cli/commands/__init__.py,sha256=i6d3YEmvLxV_pxLsHcj8CVmT0IsHRlwUt1Y7c_bNDP0,1914
9
- dstack/_internal/cli/commands/apply.py,sha256=4voRCc6ae9WfhheEkme-JaZsOMzGtUKr_ZqBU_yphZg,4808
10
- dstack/_internal/cli/commands/attach.py,sha256=ppN1wj003ydaGytZwOCh-Cv5WOkMuOMsfbbGB2BYqOg,4178
7
+ dstack/_internal/cli/main.py,sha256=RBGA0CvpRTS2seJPwYBQN_HIqEqSCF8iYoUMjDub57g,3676
8
+ dstack/_internal/cli/commands/__init__.py,sha256=e8EjD8Ej7Q3_APlxAN7NBwY7dGnW-DR91nH_RgcjBXg,2023
9
+ dstack/_internal/cli/commands/apply.py,sha256=dZH2B3Yr-lB7hs-QeUnvX0FV0Yk2x19dEO5uSFo4098,4909
10
+ dstack/_internal/cli/commands/attach.py,sha256=resmqoqkIOptp9Vn4BMs8m42Txl4mPzFDhHcv_lkWJk,5033
11
+ dstack/_internal/cli/commands/completion.py,sha256=2gDBYNb9u1JtuvZaAzqEOy0_ZatBvwn0Aq10j138xnA,546
11
12
  dstack/_internal/cli/commands/config.py,sha256=wc4haqU2-a65DcHdIH0gLyz3ViZ05dR7RXTlPm92G9g,3113
12
- dstack/_internal/cli/commands/delete.py,sha256=2jSt1XQ0W9l5YciO_bylGjljrPYpJbCyJu4HDYsXWtU,1317
13
- dstack/_internal/cli/commands/fleet.py,sha256=JmQCw93yXY4dGZM58zmrNJNwgLDQN6u4evIquJgncbk,3923
14
- dstack/_internal/cli/commands/gateway.py,sha256=nECzuhStVP_EI_x8PvwC2v4SlXH4sTG5Zh1fI2E30B4,5379
13
+ dstack/_internal/cli/commands/delete.py,sha256=agFBwJg8JXy1xp1UplRFLEPbix1bKvt6XvSBKpSPwYI,1418
14
+ dstack/_internal/cli/commands/fleet.py,sha256=J0Yi5CAYvIQF_NC4ZBsDYGc3grTOtvaF7sVcobd19Go,4028
15
+ dstack/_internal/cli/commands/gateway.py,sha256=PYVP3ngxKZ7hIvjUF3HcphMjXQRj84ePQs6gVrDjkgU,5567
15
16
  dstack/_internal/cli/commands/init.py,sha256=bLhSlViNWtjflB6xNq_PuCR2o2A06h222luh1NeUgVA,1169
16
- dstack/_internal/cli/commands/logs.py,sha256=S_TbKQ3YNKIlrcHlxnZl74FVeNq_TOiSNZBiUi7KjXI,2239
17
+ dstack/_internal/cli/commands/logs.py,sha256=ytWsxo_MGlAxsuNOd-yXsFzRDbnye_gtMcFfVdP2F4c,2349
17
18
  dstack/_internal/cli/commands/pool.py,sha256=XjTkW8cMQR20KoUrPuiQI246IMv8qTJD7-_Siuzgu0U,20656
18
19
  dstack/_internal/cli/commands/ps.py,sha256=WUQKL-1HcoM-oFF_WX4zplO8yKGMWfVbsivg0L7LP2w,1666
19
20
  dstack/_internal/cli/commands/run.py,sha256=hDItdHKXvVGQPqXKN-OQJ0HKupgmocqP3DNPl-yCamE,2690
20
21
  dstack/_internal/cli/commands/server.py,sha256=dCEdmVp1OlwFnSGw9k8mBb26wZy1D_ctgn5pmK8ZrCQ,2802
21
- dstack/_internal/cli/commands/stats.py,sha256=cCAk7xgWiCBUF1o7iqYDr4iOwWGTjkoEoEOBaEVr-Fk,5275
22
- dstack/_internal/cli/commands/stop.py,sha256=XFUe-5CiRlYw5ggMf2paZDfz3KXdOLDukA7NY3KEv5c,899
23
- dstack/_internal/cli/commands/volume.py,sha256=JatBQRcwcSrZzdGpmaeCwqdR31ZSNKJQT026V0C_aWE,3107
22
+ dstack/_internal/cli/commands/stats.py,sha256=KKSYfUmTL8d8_29Fajue_sa8KX_ifE_vx98CCNjttSo,5376
23
+ dstack/_internal/cli/commands/stop.py,sha256=i7TreejSemrQcL7C37La22KkwM98O09IDMRNt8cw1NI,1000
24
+ dstack/_internal/cli/commands/volume.py,sha256=h0bQQm6zx1Bq0kdBX5ksqPZk55wz-md_Kitm0RTDReg,3214
24
25
  dstack/_internal/cli/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  dstack/_internal/cli/services/args.py,sha256=Rnqq4M979bNACwWehgGKF2j30x01Efs-dDP-bjyTroE,782
27
+ dstack/_internal/cli/services/completion.py,sha256=HvWHdZhXQWX1FyHf1OtQJxeuIXMXBKcoa5UjNRr0AN0,2984
26
28
  dstack/_internal/cli/services/profile.py,sha256=Fl052TeMCbWO1Q6HiaPVD9CdfClzZAkknkCd2pYXpdM,7716
27
29
  dstack/_internal/cli/services/repos.py,sha256=ImJuElGjsR4OQ7dBquy4PCQUbBM4bR4vhyLwMrVBS7k,3307
28
30
  dstack/_internal/cli/services/configurators/__init__.py,sha256=z94VPBFqybP8Zpwy3CzYxmpPAqYBOvRRLpXoz2H4GKI,2697
29
31
  dstack/_internal/cli/services/configurators/base.py,sha256=DxVuF9pDqghq9mFCcTDG1CxO06IAAwvzlc9nHflCipc,3443
30
32
  dstack/_internal/cli/services/configurators/fleet.py,sha256=bKnWXhr7r8GndxedNdG_TWvwcxV4gab_LFt4s3Q17D0,14822
31
33
  dstack/_internal/cli/services/configurators/gateway.py,sha256=czB2s89s7IowOmWnpDwWErPAUlW3FvFMizImhrkQiBM,8927
32
- dstack/_internal/cli/services/configurators/run.py,sha256=8RFxrk9EgOJZ2GoZPmhAm8z4XoTcVvYGkmTHS6uk73U,23421
34
+ dstack/_internal/cli/services/configurators/run.py,sha256=kRbT-yczl8h4rjCjiWMd2bB44x7iBWqDC1qKCOPi2HU,23072
33
35
  dstack/_internal/cli/services/configurators/volume.py,sha256=riMXLQbgvHIIFwLKdHfad-_0iE9wE3G_rUmXU5P3ZS8,8519
34
36
  dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
37
  dstack/_internal/cli/utils/common.py,sha256=rfmzqrsgR3rXW3wj0vxDdvrhUUg2aIy4A6E9MZbd55g,1763
36
- dstack/_internal/cli/utils/fleet.py,sha256=F9oW381tPePaxB0jBnxdpWLvxF6RDBKLbGuxEF52E-s,3755
38
+ dstack/_internal/cli/utils/fleet.py,sha256=NpqTdcMVcuUGke9drroxDoNnmifbKV7iziqdGPLc3lk,3885
37
39
  dstack/_internal/cli/utils/gateway.py,sha256=jMytH6u3x8hctMhm9bcmXLJxSgTXmpW8M9abATQrw3c,1474
38
40
  dstack/_internal/cli/utils/rich.py,sha256=Gx1MJU929kMKsbdo9qF7XHARNta2426Ssb-xMLVhwbQ,5710
39
41
  dstack/_internal/cli/utils/run.py,sha256=4NDhlcdE4bccQ4gWzhZ2EP8tHryZt4eI3BBho425VOA,7737
@@ -45,50 +47,50 @@ dstack/_internal/core/errors.py,sha256=UvqMIBVHG1NIUP0w0g5dWjnxOz37sfFi4lh4yuYK0
45
47
  dstack/_internal/core/backends/__init__.py,sha256=P7uX9QYj-aWSHOub1vIwr-MVERVCwTi8pcG4MQVuEYw,958
46
48
  dstack/_internal/core/backends/aws/__init__.py,sha256=gGXM9op3UJ3-OGDjNr4ywa_fNf--oywRbrOGUH2tTDA,850
47
49
  dstack/_internal/core/backends/aws/auth.py,sha256=lRBwNUdEWMWlblDnFSGlIcNkZMY2tSjapdq1OjwollU,1253
48
- dstack/_internal/core/backends/aws/compute.py,sha256=I7DyBNc9wFqMQ9-9IxX3rmIyNzq4hCS5hT8uorSn9_E,35308
50
+ dstack/_internal/core/backends/aws/compute.py,sha256=PIxXZEzUQoLqIiplPkDyP5pWUgTPXz8XVe5Bg9Ge3hQ,35945
49
51
  dstack/_internal/core/backends/aws/config.py,sha256=bd4juOaiqsUsWeorIgqCW0xNigCFIRQIvaRxEHyhpwg,533
50
- dstack/_internal/core/backends/aws/resources.py,sha256=yKsMMLO4HMRTWero8cLDxtavWvqcne_y9VDXVH9G1lE,22551
52
+ dstack/_internal/core/backends/aws/resources.py,sha256=8Pm1zwejYESlH559GB0zNg5zVBgC5D4bPyGx7zBRhmg,22540
51
53
  dstack/_internal/core/backends/azure/__init__.py,sha256=J-mWp413v0DQFaTochlvMJXlGf8ukQCH_6oGuYFR31U,718
52
54
  dstack/_internal/core/backends/azure/auth.py,sha256=CZZlcUMkjh18wwtMl75K7kfob1bc9aI1TRr5QwMn_u8,1523
53
- dstack/_internal/core/backends/azure/compute.py,sha256=5NdOT1zonGrQvFiJK3unZW0vI-hw8_Nm8918Oh80ERU,23041
55
+ dstack/_internal/core/backends/azure/compute.py,sha256=ERtj3cEWVUR6MeA8W4dr4fo4SqtVMPfbkomoge5IIZs,23290
54
56
  dstack/_internal/core/backends/azure/config.py,sha256=nb7e9rBt5glSOcXW1NZUxlyjfe2W1CiEPERNlxLcLUo,391
55
- dstack/_internal/core/backends/azure/resources.py,sha256=OsVrWnrqUDs8-A6QOH5XDHTX6-fKpXotlvYLBiXDAH8,3020
57
+ dstack/_internal/core/backends/azure/resources.py,sha256=keE3ruSSNWhSYMCkG7832TYppMMe8lDEyph0tulhd18,3048
56
58
  dstack/_internal/core/backends/azure/utils.py,sha256=taHMJq6UHRzUXLUcO2P5VCKy3wJaye2bG-6QdkEPNdY,1741
57
59
  dstack/_internal/core/backends/base/__init__.py,sha256=nTI1mn75hqwUumBVmyD_OSJW3boYHzNh1ER6m9yl39Y,280
58
- dstack/_internal/core/backends/base/compute.py,sha256=awJhv8moWYPk3lOn7kSUT9B0TmgvJi980sNB8DsPjyI,17039
60
+ dstack/_internal/core/backends/base/compute.py,sha256=cATataCnSX881cU5spmpckI5bgjGseOQ8_Ms6ksYyqI,20077
59
61
  dstack/_internal/core/backends/base/config.py,sha256=iwgrp31Yt0iHRU2IpGhOwyuEcdt3igP9Q9rV7pmnyEg,74
60
- dstack/_internal/core/backends/base/offers.py,sha256=Lr0nVbSNBuIG2n0geDyX2JUexNnHqdoHWVshmuFQET8,5682
62
+ dstack/_internal/core/backends/base/offers.py,sha256=89H6g6Dw5WvXDEBnKoZUF-fGIE3Clc8T4lEjZ_jr71A,5909
61
63
  dstack/_internal/core/backends/cudo/__init__.py,sha256=e-RHwoV4-rg1I31BrSIZsgPBY5rsa_kN9dbZM0pve04,519
62
64
  dstack/_internal/core/backends/cudo/api_client.py,sha256=ygq1Gx7ZvwKaifdXtvzDSw4xR4ZH6UWd5J47BjuaGh0,3685
63
- dstack/_internal/core/backends/cudo/compute.py,sha256=Xr0oyNKeqZJtdD9HeCMU3_v6oJew25YcjCRt3jdVHSs,6825
65
+ dstack/_internal/core/backends/cudo/compute.py,sha256=-N6u7PmU--cpSk-B_KG-SbBbFO3ida4yJeTCVPyqhyI,6871
64
66
  dstack/_internal/core/backends/cudo/config.py,sha256=OEtzz3bxJ29D07i5pHd5xd5SkclbpFBN-i--yHyZ6gc,245
65
67
  dstack/_internal/core/backends/datacrunch/__init__.py,sha256=UiyGh78DabzGFkb-zwm84NB5CyhhSoXpqX8FxJp7pY8,573
66
68
  dstack/_internal/core/backends/datacrunch/api_client.py,sha256=EMnd4uEZqSXEcCajMvaYKnL4l-mZRPGYlsjaeG4It8M,2602
67
- dstack/_internal/core/backends/datacrunch/compute.py,sha256=gyOftmUdmS9fMqpyew0POundGLBPEzI2S_sGemhIOFc,6633
69
+ dstack/_internal/core/backends/datacrunch/compute.py,sha256=8ldjO2CtiOHTj9LsoIv2WS0Tcpc-14-1tvZZZ4gI_dg,6759
68
70
  dstack/_internal/core/backends/datacrunch/config.py,sha256=bShWTAb02PYP8fuBz7H7r-YhRkhy6_yfD0nuaKd9xd4,281
69
71
  dstack/_internal/core/backends/gcp/__init__.py,sha256=nxhPNTGd1pPag2DwBRKg3X5gEKlh32p7a9Yfyi7-d5k,546
70
- dstack/_internal/core/backends/gcp/auth.py,sha256=AL5i7VtXvMboTCk-dzvNykaogYV31xAYfEivXxzOD_k,1832
71
- dstack/_internal/core/backends/gcp/compute.py,sha256=ksGatfOjPp78kTIpuxbEX3awMv9Wy2ErLX4FbGlrOI4,36001
72
+ dstack/_internal/core/backends/gcp/auth.py,sha256=hSClOujk8_kcodqK4SltdaIty6kKaQAecHYya99-LBQ,2495
73
+ dstack/_internal/core/backends/gcp/compute.py,sha256=-tp5z4cwUY3SVCSsijRHm8QnBaAzvMh-wVs6sVHdoCE,36087
72
74
  dstack/_internal/core/backends/gcp/config.py,sha256=AjNHgIsDqB5aKdyFXTKG9wNO2d3lgNyJW4Dk5Yb-LL4,722
73
- dstack/_internal/core/backends/gcp/resources.py,sha256=6khFYRZwMrjRxVAoHav3OsKFSVw-tuLVkJ_FzQCY8EI,14741
75
+ dstack/_internal/core/backends/gcp/resources.py,sha256=ZDs8rjdMCgHeeHH_vzxJjhCJN-omF4tRBApkN3GOjpg,14539
74
76
  dstack/_internal/core/backends/kubernetes/__init__.py,sha256=MpuT3Dxt2ZwZpAQomE_fXUDmgHBmfP8xvUP1YMAKTJQ,573
75
- dstack/_internal/core/backends/kubernetes/compute.py,sha256=vpI6Gb_WdrZHNqsXEqOUM2f174V0Nv7Zzsd1hlAjV1c,22611
77
+ dstack/_internal/core/backends/kubernetes/compute.py,sha256=aAh4XNs-5lTI-q_2Bt6NzyKT3-mQSCLTk_1qCDLPAhg,22719
76
78
  dstack/_internal/core/backends/kubernetes/config.py,sha256=odZgt1y8tPPm5L6Wta4XjpVDNi7aJGPANyyyapzUDWU,227
77
79
  dstack/_internal/core/backends/kubernetes/utils.py,sha256=k0cmjqMoNfJ_pAe6W82exV4AywMcpZ5jf0QICVbVuFY,1218
78
80
  dstack/_internal/core/backends/lambdalabs/__init__.py,sha256=eAjZoRfstuNcgDpYjYPBfHbBTjmQ0jkRP1AvftyR_Lk,581
79
81
  dstack/_internal/core/backends/lambdalabs/api_client.py,sha256=WaBO7VrPB4kbMQJDxjFxx0HEtAoSncQvH-cahWnVxx4,2688
80
- dstack/_internal/core/backends/lambdalabs/compute.py,sha256=cXSCXS5OU-e1p-UxrZenyXHPcyYHMF02LNH3HSrT4FI,8216
82
+ dstack/_internal/core/backends/lambdalabs/compute.py,sha256=1G5Z2ECtSqlp9dZcbFSKa0zYcgMb5_IA3kMOLFXNCu0,8398
81
83
  dstack/_internal/core/backends/lambdalabs/config.py,sha256=dK5nDZ320x8xVWaIZ_As2rk1rJOpxuFwIve1Qe6tjp8,261
82
84
  dstack/_internal/core/backends/local/__init__.py,sha256=Bbq2l8PWJTsMqovjS4u5VTDFrxYn-o3nJtdD1hfrBHM,399
83
85
  dstack/_internal/core/backends/local/compute.py,sha256=5ETgGZ09axLpRghBZp4GHUcOX0-m4ShhcL3MXHvySaU,3248
84
86
  dstack/_internal/core/backends/nebius/__init__.py,sha256=wmJ1JPm54Vc3omuVrLKbbEr_F9mZbeLl-Vb_eMF5r2s,537
85
87
  dstack/_internal/core/backends/nebius/api_client.py,sha256=T2f429uY2KFWY8NrnCaAu16O4L2ygYrkc10crrbu-BI,10326
86
- dstack/_internal/core/backends/nebius/compute.py,sha256=3mI0-au3XL-EViguA5tVjEws5aEl2Mbu747jKoNQCLo,8510
88
+ dstack/_internal/core/backends/nebius/compute.py,sha256=trlHEGlBiMg_ehYYUyxlA4hM2qQ3dMb7FSMBzy2cvdk,8518
87
89
  dstack/_internal/core/backends/nebius/config.py,sha256=S4XL45mxaZvqFraCyGefGY7G3vXbzLDP-ozIndKrL_w,244
88
90
  dstack/_internal/core/backends/nebius/types.py,sha256=7V5UTFlhdKO410pxtsQRpCjsaMf1vxcTwT3ncp1QI78,509
89
91
  dstack/_internal/core/backends/oci/__init__.py,sha256=Tjf82P3e3nRnYwvr27IRi9C-c9SI6-39TongpJFeQqY,510
90
92
  dstack/_internal/core/backends/oci/auth.py,sha256=dZy8EWsnUbylp0x1VYZpgu2MBXh_Tocz6KPAjPNmjbs,883
91
- dstack/_internal/core/backends/oci/compute.py,sha256=bm3LwfAd8PeNe_P0xIFuAPZIoL1KLqTcJ4M8Hz4dwhA,7742
93
+ dstack/_internal/core/backends/oci/compute.py,sha256=rNEXOsrjfcGRuz-tXVlKJrMcxPXAaxgdaBSwwgGXzu4,7894
92
94
  dstack/_internal/core/backends/oci/config.py,sha256=rSwnbRh7qXe64CfJ_oOnIRFaYevjZ5J4Hx1dNwkT3Xo,226
93
95
  dstack/_internal/core/backends/oci/exceptions.py,sha256=GxlUf7itcAQgY3m-U2ul_ZXzfUOcEcPEmisWFaoWSkA,288
94
96
  dstack/_internal/core/backends/oci/region.py,sha256=6MElwRMVQvl7FF2E90nQ1p7QmcRcyhAps2Dy2cOYR4A,2935
@@ -97,24 +99,24 @@ dstack/_internal/core/backends/remote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
97
99
  dstack/_internal/core/backends/remote/provisioning.py,sha256=oNbomEuXIBdgYeCh6_RWB0nWtnrJ0-HRf9M6VYgoQvk,12461
98
100
  dstack/_internal/core/backends/runpod/__init__.py,sha256=CC9K4rZlSxpSIqt9akM1PIRzaOGozreY4hQWxO8dRZ4,537
99
101
  dstack/_internal/core/backends/runpod/api_client.py,sha256=Oet7CwQTu3sE57unqh-JvuMCBDEDPruAbGB4GyM0dM4,13427
100
- dstack/_internal/core/backends/runpod/compute.py,sha256=GRivKqHvobYHB55_76MiYcye1nwznxH2wgnwAx_xSlQ,9552
102
+ dstack/_internal/core/backends/runpod/compute.py,sha256=u6OSdGCXH5L2JX6ztEtXHW76MNv8ZE95PIhhVcfsHnU,9867
101
103
  dstack/_internal/core/backends/runpod/config.py,sha256=V9ihNEigp5szdDuffHDM47JsshyPc25x6jHwbuc2YhY,257
102
104
  dstack/_internal/core/backends/tensordock/__init__.py,sha256=AihBzxY8RjJHXYrpqaSGCkcOwqYsMgiyIlH16fnHxso,573
103
105
  dstack/_internal/core/backends/tensordock/api_client.py,sha256=4106Jzn_I1WTX0VZkZk3I-xkG7sHGTUBRapi8Fk2H7o,3805
104
- dstack/_internal/core/backends/tensordock/compute.py,sha256=XhenSNBt2xEatWQRc6QKcIlQXIIYYR7zfEb4zk2DMxE,5348
106
+ dstack/_internal/core/backends/tensordock/compute.py,sha256=njDKvNxN7Fupoxw_eMiItimOvadvdLXEAivM3e75ro0,5584
105
107
  dstack/_internal/core/backends/tensordock/config.py,sha256=tDbQd2JaALw05WQMHepbyaIBKLvDP0AW3qJyoMDxX5o,281
106
108
  dstack/_internal/core/backends/vastai/__init__.py,sha256=0biDt0AfWis81AJZc-R2TuUdSodjpiJjUtxPTG8RdG8,537
107
109
  dstack/_internal/core/backends/vastai/api_client.py,sha256=b-qgx352lnxhBXichJtURFGxR7Jd9JYx4WXaxYV-HH0,4940
108
- dstack/_internal/core/backends/vastai/compute.py,sha256=GYKEGPSUqxgq4_ei7VRjMyx-BAq1ULrZs9sRCY4qW10,4638
110
+ dstack/_internal/core/backends/vastai/compute.py,sha256=3gvzzaYo5yTrnWbRz10M6DRca2WUCiQXqUaVKVBUi5M,4854
109
111
  dstack/_internal/core/backends/vastai/config.py,sha256=cVHqnEkPKw2DFOkEGJ3XhMcRx4IBDgfUuS69DKksosI,244
110
112
  dstack/_internal/core/backends/vultr/__init__.py,sha256=D5FekILnO-lQ91hPYKrXWB0BuiGx7djMajuMa3ZlrV0,528
111
- dstack/_internal/core/backends/vultr/api_client.py,sha256=69iQFuP63Fb5UMacWYLxGXB9V74Tr1Hd6MheVHZkXb8,4346
112
- dstack/_internal/core/backends/vultr/compute.py,sha256=M78r6GIn4HI70yCBWB22xMPLADWgf8FVLVB5M8ymkH8,6175
113
+ dstack/_internal/core/backends/vultr/api_client.py,sha256=isHbdBQr2hFRYTcnTsGxSlWIKYrpC1X_gjSZjGxUupE,4363
114
+ dstack/_internal/core/backends/vultr/compute.py,sha256=HqoI7ZF_DafrOG3XALdRjYQdzpvCP0_SBsm6GSk1Sw4,6357
113
115
  dstack/_internal/core/backends/vultr/config.py,sha256=TqjT2yhW9rAiDpJ96gBFTM638FS9QwYAT33WSoh6z34,251
114
116
  dstack/_internal/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
117
  dstack/_internal/core/models/common.py,sha256=XNfEP_lHAs398oDfSVn8kCX79GIWvl0hDs05Rz1CBic,2579
116
118
  dstack/_internal/core/models/config.py,sha256=JJ7rT7dztzTWCY5TkoyxXxTvG5D4IFYhGe7EzwkLOWQ,581
117
- dstack/_internal/core/models/configurations.py,sha256=Jj9mM52uoYKdq557it8L8UHWsP1kbzHxjV-hmkouHf4,14816
119
+ dstack/_internal/core/models/configurations.py,sha256=lC5Pp_sQUb8GzR2z3QL1vMEMRgC8YwMPQlgpKt0z9dM,14726
118
120
  dstack/_internal/core/models/envs.py,sha256=ls2ahIhEb3LYLX_auH3F46uTRp2zdlMWKEpjmU_V3S4,5017
119
121
  dstack/_internal/core/models/fleets.py,sha256=MzJFMpzsuXBE1Fxlbf8dtsqes5qWMCMRSUWGoWIcRnA,10772
120
122
  dstack/_internal/core/models/gateways.py,sha256=n9lPq6X0n2a7fF-CseiBVDDwasJsU3VQumTetMsfZcc,3465
@@ -134,9 +136,9 @@ dstack/_internal/core/models/unix.py,sha256=KxnSQELnkAjjuUgYcQKVkf-UAbYREBD8WCWD
134
136
  dstack/_internal/core/models/users.py,sha256=o_rd0GAmd6jufypVUs9P12NRri3rgAPDt-KxnqNNsGw,703
135
137
  dstack/_internal/core/models/volumes.py,sha256=ZebkSybGXmnPQHjsDCWVofHavjwjLIovssmpXnLW6nU,6207
136
138
  dstack/_internal/core/models/backends/__init__.py,sha256=iPMAv4j7gpHc0cjt3SxzQGb-sywms8LUXt7IjtKNPnM,5589
137
- dstack/_internal/core/models/backends/aws.py,sha256=H0RB7pTVb7vjW_-MDpBBwPLbAoKDRtYFHe_n4ppXz6w,2463
139
+ dstack/_internal/core/models/backends/aws.py,sha256=YCt2Q3MF7RjYa707iU0EyXvkXYIr2ivNtdauCW-khss,2550
138
140
  dstack/_internal/core/models/backends/azure.py,sha256=OhK3HBvI_ZfLmKVxlnm7AowWOlarp6QXb3tbcbFoACw,2076
139
- dstack/_internal/core/models/backends/base.py,sha256=1UWcpAI6hhwJkNFLp00eJwRzb9C82dsp7QsMkRHr9VA,1373
141
+ dstack/_internal/core/models/backends/base.py,sha256=FabJjSLFnLMY597fJXgS8o2shtToML756aEd30OQyDo,1428
140
142
  dstack/_internal/core/models/backends/cudo.py,sha256=ZaqIq1yxxnoFddvzFES7VO82bVNxeI5laFWKKN_JaeE,1111
141
143
  dstack/_internal/core/models/backends/datacrunch.py,sha256=CpQDDZ2xHWz5BQPb9NA_eSP7FaQQegT0yGJZ1CCSNqc,1281
142
144
  dstack/_internal/core/models/backends/dstack.py,sha256=Oxyf8zqbOjxStimYrYuYvf0Kop3dJbyBQnkMnUGDs0Y,754
@@ -154,13 +156,13 @@ dstack/_internal/core/models/repos/base.py,sha256=lHV9iNSV1Iv1xxqxO7wCcGZ5WIliMp
154
156
  dstack/_internal/core/models/repos/local.py,sha256=ve9DoCn9qDyE2VOxzoK4_BdXwVveFPFY0fSls7jRcmI,2379
155
157
  dstack/_internal/core/models/repos/remote.py,sha256=JjqPVGzeYr7T8MhsvkUs3GzUpfnAIEWj-UAUbwJhl2Q,10877
156
158
  dstack/_internal/core/models/repos/virtual.py,sha256=1p6k2vBfWI6UT91os3lZfV5wl8bskNGFa1hyI5kiY-8,2569
157
- dstack/_internal/core/services/__init__.py,sha256=Utrh2zbYsP6IBGWMGROaHUefgo_TvLloN3logcdhuC4,282
159
+ dstack/_internal/core/services/__init__.py,sha256=UVVcj26WYVgo7jHzD07sNRqSOO7zA3QzQv-9LnCDqR4,415
158
160
  dstack/_internal/core/services/api_client.py,sha256=HTQ0fcZciUh-nmfV09hUt__Z4N2zq_R12xAiYXD0Jy0,650
159
161
  dstack/_internal/core/services/diff.py,sha256=lw7vTOYnGtRWlEulgVlHt1KjLdC8VJpfBcqMRuFZzSQ,532
160
162
  dstack/_internal/core/services/logs.py,sha256=7_eJdH4MD-3rVb4A6rIJfjj_p4jzUOCmjRVlPD-UDsg,2166
161
163
  dstack/_internal/core/services/profiles.py,sha256=SJGT6LG8JmrfsqlyXOkPZd61BDwZ4Q1ngcmDVgq826M,2160
162
164
  dstack/_internal/core/services/repos.py,sha256=YgTmLX8U1Y5cz2dG9yThK1-Geq02iik_C6DGZ0y6uEY,5311
163
- dstack/_internal/core/services/configs/__init__.py,sha256=2jwu1w0vEDNcKGdeI15SS4EtpLSZzRpG8xZslHgTJmY,5484
165
+ dstack/_internal/core/services/configs/__init__.py,sha256=hBFfU1IhkFJ7HZU9JgzBys8i1l_YM-iEKt0JqYd1YiE,5580
164
166
  dstack/_internal/core/services/ssh/__init__.py,sha256=UhgC3Lv3CPSGqSPEQZIKOfLKUlCFnaB0uqPQhfKCFt0,878
165
167
  dstack/_internal/core/services/ssh/attach.py,sha256=Vc47zLXqCUcg14BahwyX9qnBaGEJi96mTU1Nd0XU31Q,9011
166
168
  dstack/_internal/core/services/ssh/client.py,sha256=FUg74jNOagYR3OKuWMBwNgJWIDwHfYrIMSER8xn92D8,4102
@@ -224,18 +226,19 @@ dstack/_internal/server/db.py,sha256=WjuqmjG3QAZmSMCeUaJ_ynbowlHuNAvYCZO649cTPHc
224
226
  dstack/_internal/server/deps.py,sha256=31e8SU_ogPJWHIDLkgl7cuC_5V91xbJoLyAj17VanfM,670
225
227
  dstack/_internal/server/main.py,sha256=kztKhCYNoHSDyJJQScWfZXE0naNleJOCQULW6dd8SGw,109
226
228
  dstack/_internal/server/models.py,sha256=VKh_lfgGUlc0Xy_CGo02IDgwPRp3membAJg07jm27j4,27405
227
- dstack/_internal/server/settings.py,sha256=tEPw0xIltvW4TpLBA-OzKRM_PmvDuD4vuXCo7ITyzpo,3067
229
+ dstack/_internal/server/settings.py,sha256=4Vazy6qel63ToJzQSjlOHAt_5UpM99inAQYEINUgUAw,3170
228
230
  dstack/_internal/server/background/__init__.py,sha256=jNDwTgQwKhK1NYl0RJaKU4mwKIMOSIxPTKVyhizU1PM,3436
229
231
  dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
+ dstack/_internal/server/background/tasks/common.py,sha256=N7xSXbf2MoBWgbJ1e3AEzYBTf1Gn-pDXYND8Zr_YCJQ,970
230
233
  dstack/_internal/server/background/tasks/process_fleets.py,sha256=lKXUvN_b7DNjD3psHzyCt_JYsTxPFuQ86iXi8fj8GkM,3202
231
234
  dstack/_internal/server/background/tasks/process_gateways.py,sha256=KN5n9r0cKizJ3oGpeLsv3euZKZOMf-02X0Sv09GE8N8,7141
232
- dstack/_internal/server/background/tasks/process_instances.py,sha256=HaOTfcBcrwlRhHHbpeRflCcf3VYW-OkE6SB74SxvwXQ,37369
235
+ dstack/_internal/server/background/tasks/process_instances.py,sha256=xRV0tJbSPean2E09opTYLUH2Z4Xpm1Lw-o-LqPcecqc,37046
233
236
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=BPv0S7pmMX91vObZiW51AJiNR0ULIj-OQlo5n97KISY,5328
234
237
  dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=DZctiMF2TXKbYeygoz--ZiC9MXVL1sQJgq0oqRIc7hg,3858
235
- dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=FAIwXKIOUbVM-svKo7aoAF9DdxIhcejQJfg6gs0z83k,30108
238
+ dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=8YH4hQXvkSxzrWz9wW0lYoMZmNgC3iUHBWR-tG_LCZI,29829
236
239
  dstack/_internal/server/background/tasks/process_runs.py,sha256=JWJqMzXXqvwQSxyKs4bKH2aBP8YQbiyO4tuwyMPVduk,16673
237
240
  dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=xv1aW2umlOdbdZn4TOvlhl6td3Uam378yIwosfSO9ks,27022
238
- dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=A8J6JabVih1nHl3Kgyaoh7eaKPywicZe7vx-4V_uvgk,4033
241
+ dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=0Z3Q409RwSxOL_pgK8JktBthjtESEUH3ahwTLsTdYPk,3800
239
242
  dstack/_internal/server/background/tasks/process_volumes.py,sha256=YafZml-b-bD7M6S0UmY-rLV-pIIX-SdzuyaErqxrnyk,4939
240
243
  dstack/_internal/server/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
244
  dstack/_internal/server/migrations/env.py,sha256=RuhcN-CST86VzMatjqBMdYcG0fGGMZl_o1YgZTL-WDw,2831
@@ -304,7 +307,7 @@ dstack/_internal/server/routers/backends.py,sha256=nocj-M0m54t_rpjZQBk15XRIVDpXI
304
307
  dstack/_internal/server/routers/fleets.py,sha256=Tmw4hlviCBuntQPpp4J8XyQZyoK2-4o41OlcEP4NNtg,4867
305
308
  dstack/_internal/server/routers/gateways.py,sha256=am5HnyWUydgUbEjIdjYBcob8CEIrx4bRtdj9kQhutkA,3149
306
309
  dstack/_internal/server/routers/instances.py,sha256=ELxXF4BiS9e4YCKFmBp8U4SsjP8eGmbj9Q4LiLfgsgY,1592
307
- dstack/_internal/server/routers/logs.py,sha256=-OO3KAjKJM3nTzva8xx_g9Wg3hfMRBuun10FN3SrJs8,886
310
+ dstack/_internal/server/routers/logs.py,sha256=_Euk283LbhlwHibJTKM-7YcpbeQFtWBqMfbOry3PSkU,1159
308
311
  dstack/_internal/server/routers/metrics.py,sha256=WEICSvIbs1-8zCgxF9WqgsR_9p0afDX_HjNW4-1LCOk,1581
309
312
  dstack/_internal/server/routers/pools.py,sha256=3NnwGQVLp5GFMypaXNKFqPjop746EEi4LSPMmx5NKek,4889
310
313
  dstack/_internal/server/routers/projects.py,sha256=0R-w_6WXUbNo6fREAexFUQ3RoOJF2D_Iz35elKjym14,2717
@@ -332,17 +335,16 @@ dstack/_internal/server/schemas/volumes.py,sha256=9iwaQLMhA6aj9XmtdU_9jWVhpzNOtF
332
335
  dstack/_internal/server/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
333
336
  dstack/_internal/server/security/permissions.py,sha256=K756I8fnBLBrq4PZwz1ttt74HI0UWBSmjaIfMHN5d1s,4425
334
337
  dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
- dstack/_internal/server/services/config.py,sha256=b7m2wkVjtXDR46WMgYLw2uun9orM9lxXjnDp53oeASM,29525
338
+ dstack/_internal/server/services/config.py,sha256=4X9KCh7Gta3WrB735YuVt7aNlH5m7G-ULRBSwHatXOo,29955
336
339
  dstack/_internal/server/services/docker.py,sha256=3EcYPiVsrNBGDQYOb60QJ241mzTT6lJROYQXIwt-8dk,5351
337
340
  dstack/_internal/server/services/fleets.py,sha256=h5LL8FGOZMOl0kzLycP36U6k3SWl_bSnSn7oFg8ubQY,28980
338
341
  dstack/_internal/server/services/locking.py,sha256=UV5kc-BgROBuNDpBrp8jkcf-fHPOpHLc8JufL-8mbN8,2453
339
342
  dstack/_internal/server/services/logging.py,sha256=Nu1628kW2hqB__N0Eyr07wGWjVWxfyJnczonTJ72kSM,417
340
- dstack/_internal/server/services/logs.py,sha256=53pymPDaM9-xXHFzCyEHdvM49JPTpsLI2aPTSP5zaPo,20090
341
343
  dstack/_internal/server/services/metrics.py,sha256=_YmAQ_oCzzklgk_O5iSJDZJhRk9rBqx8REkPcRQUTAo,3490
342
344
  dstack/_internal/server/services/offers.py,sha256=GIaICztEu4zbcpIGHvNsfMVYmPvoYg5zcQ0apHNdgBw,6954
343
345
  dstack/_internal/server/services/permissions.py,sha256=l7Ngdelmn65vjw13NcOdaC6lBYMRuSw6FbHzYwdK3nE,1005
344
346
  dstack/_internal/server/services/placement.py,sha256=DWZ8-iAE3o0J0xaHikuJYZzpuBiq7lj41LiAP1PfoEs,1773
345
- dstack/_internal/server/services/pools.py,sha256=yDlNJn219satSuoxRmlxDG-BPrK0j7MdmGNa-HMyCsk,28886
347
+ dstack/_internal/server/services/pools.py,sha256=-lF9jrAosNpRxRG3PnbzLWgwPFidGFccjF7tgKyC67A,28911
346
348
  dstack/_internal/server/services/projects.py,sha256=HWOnFOC6LmvbjDzRKADv7tXKIDWthbO11zrsHU7vkew,14709
347
349
  dstack/_internal/server/services/repos.py,sha256=f9ztN7jz_2gvD9hXF5sJwWDVyG2-NHRfjIdSukowPh8,9342
348
350
  dstack/_internal/server/services/runs.py,sha256=3m9oYKq08QQF1GlaOa6_2nYp9SMYoqvfjVnO3-fpTGY,36045
@@ -352,12 +354,12 @@ dstack/_internal/server/services/volumes.py,sha256=UX-fqC3c240aG6EbdtVsXrJQbkF0O
352
354
  dstack/_internal/server/services/backends/__init__.py,sha256=Q8Ju0Shf2RAlIdi1CapJNUKOdUAFeRnxhNYti6GZiww,14923
353
355
  dstack/_internal/server/services/backends/handlers.py,sha256=j-MhBxrpdepoDG7f2tApjFnE23RVO5I15-hxHyOWnew,3251
354
356
  dstack/_internal/server/services/backends/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
- dstack/_internal/server/services/backends/configurators/aws.py,sha256=NVwLd9Ww0S0gFT1A2BqwMxItXJVwkKkVd1kg0HiQhXc,7899
357
+ dstack/_internal/server/services/backends/configurators/aws.py,sha256=PyyzH38rIQd7xM7tGnQjqtybcvdFNvqhZf6EIqiWvW0,9175
356
358
  dstack/_internal/server/services/backends/configurators/azure.py,sha256=AANl9dp4RmNT9Q_-ipcLDFp7w5F_-gIxogLthAJWqZY,20206
357
359
  dstack/_internal/server/services/backends/configurators/base.py,sha256=GHS0eBCRptdfZN1xISqPgOEt46oYK6C9Hpb3b_c0OtA,2433
358
360
  dstack/_internal/server/services/backends/configurators/cudo.py,sha256=o5KIXuJLFfzoeUqAivvMhwLy4GWDbKR6E1J9egP8T9g,3102
359
361
  dstack/_internal/server/services/backends/configurators/datacrunch.py,sha256=9rZPns9GwHywXsBFh47sa3IAnh0h7U92SLlHQD1Mj9s,2849
360
- dstack/_internal/server/services/backends/configurators/gcp.py,sha256=Rf5vjaJx_V0_h8vP93KOOKAUTBaKJoVUL3WZmxm-7yU,8970
362
+ dstack/_internal/server/services/backends/configurators/gcp.py,sha256=EuwwcucFxLgffk58TvH-GYI39gOn4h2_Wz-fi91Jhao,8839
361
363
  dstack/_internal/server/services/backends/configurators/kubernetes.py,sha256=HtZQfxTrCf23fn3QX36Z5RNUo78edr00xxgcUJKVulk,2518
362
364
  dstack/_internal/server/services/backends/configurators/lambdalabs.py,sha256=yVFOnKTplxl-rGDUVUDUG5R5sl1qmxQwImdnaSoNqf0,3325
363
365
  dstack/_internal/server/services/backends/configurators/nebius.py,sha256=tPch1yC4Tftli-rqt36I4HfYjfvwYRP_irrBJFHdhHY,3240
@@ -375,21 +377,26 @@ dstack/_internal/server/services/gateways/__init__.py,sha256=ceTzXRWu-pVghze9New
375
377
  dstack/_internal/server/services/gateways/client.py,sha256=1PH9gUjRkHegp37B27pjBVoPFk64KjxcE30eEPBTLM0,7321
376
378
  dstack/_internal/server/services/gateways/connection.py,sha256=ot3lV85XdmCT45vBWeyj57nLPcLPNm316zu3jMyeWjA,5625
377
379
  dstack/_internal/server/services/gateways/pool.py,sha256=0LclTl1tyx-doS78LeaAKjr-SMp98zuwh5f9s06JSd0,1914
378
- dstack/_internal/server/services/jobs/__init__.py,sha256=zxKGDUo_6Sjoh3VGMQVrxQn9OkwgJQJXeKo3DZWkRI8,25283
380
+ dstack/_internal/server/services/jobs/__init__.py,sha256=euq5U73vEGWxDmNASHjnZpWRc5Kp2Dpgy_opMwUDeeU,25444
379
381
  dstack/_internal/server/services/jobs/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
380
382
  dstack/_internal/server/services/jobs/configurators/base.py,sha256=I21dp1P9XC49NNJL_bfihwXfhFd6G-yQXYFYk-EJPEI,10306
381
- dstack/_internal/server/services/jobs/configurators/dev.py,sha256=2EEtfOpNXP5d9b3ZErE3dA3Co8aAAv1fbx9wAjRZpGY,2018
383
+ dstack/_internal/server/services/jobs/configurators/dev.py,sha256=_QOExS0ifCZMp4hLYaCuyb-ASQgAegpDguGWNdF_TUA,1953
382
384
  dstack/_internal/server/services/jobs/configurators/service.py,sha256=FOWrLE-6YFSMuGqjOwYTLMV4FuIM5lCMDFjS0l0CoLI,929
383
- dstack/_internal/server/services/jobs/configurators/task.py,sha256=ojCgdMyGak8u00tdu-th6U6w0pGRENV1mPtajwzeA_s,1502
385
+ dstack/_internal/server/services/jobs/configurators/task.py,sha256=0-B3oO-61Eq4-mmlLmqJPliFKHhvvIV0tqc12slcQuA,1436
384
386
  dstack/_internal/server/services/jobs/configurators/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
385
387
  dstack/_internal/server/services/jobs/configurators/extensions/base.py,sha256=xJbHxaaSJ1zjn8zuuApP1Xt2uBaedPhhc-IY0NtDDJQ,418
386
388
  dstack/_internal/server/services/jobs/configurators/extensions/vscode.py,sha256=DAj8OEVLyL1x8Jko2EXKhnAkcSnlO1sJk6o6eiiVkDI,1611
389
+ dstack/_internal/server/services/logs/__init__.py,sha256=NAjO1KeYvuDznN2EkfAaJt9S6Y00fo_dl3ob3WmsdGQ,3088
390
+ dstack/_internal/server/services/logs/aws.py,sha256=949k8t9H9v_-aedDjDWkw8yPVyhZemmsszcDDEL5Tb4,13711
391
+ dstack/_internal/server/services/logs/base.py,sha256=7eCB6SPF9iWviv4vZ_34SvfM_Bvi9DeVj1t7TxmrXKs,1273
392
+ dstack/_internal/server/services/logs/filelog.py,sha256=2IAFQgLf5NwA1NTibe3ybn47TEddgUKZ_7b4B4yiQOY,3856
393
+ dstack/_internal/server/services/logs/gcp.py,sha256=xV-BJ4NcU8bRVAEXa0dmdYpqNy93dIKC6axo0viQi5c,6867
387
394
  dstack/_internal/server/services/proxy/__init__.py,sha256=aklmvGaGXISztQft-nH8R98WRU6x_L0Fx3RwVDhwt3g,85
388
395
  dstack/_internal/server/services/proxy/auth.py,sha256=AVhDCnk9KvxJ7Jsd8Xmotl_29V4lNuBw8mQNBhx90Ws,485
389
396
  dstack/_internal/server/services/proxy/deps.py,sha256=u4dHHKBlTgC8Fnnl3onErgE1HGKFwyZTwvq0uT6IdQ4,846
390
397
  dstack/_internal/server/services/proxy/repo.py,sha256=2Uy90hFeLlQBqqId9Y2tn4mJO3bie9v6FdVP0y5Z9UU,7195
391
398
  dstack/_internal/server/services/proxy/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
- dstack/_internal/server/services/proxy/routers/service_proxy.py,sha256=8rsuenv9LUlFJghV8Ly4vewGmc4pDdVTyuU0xiNLuVQ,1581
399
+ dstack/_internal/server/services/proxy/routers/service_proxy.py,sha256=5oB-SX8f_f32tTs5aJe9ZuMycHAyVTQDO9xJcFmUKCs,1953
393
400
  dstack/_internal/server/services/proxy/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
394
401
  dstack/_internal/server/services/proxy/services/service_proxy.py,sha256=4JrSxHqhBYqU1oENii89Db-bzkFWExYrOy-0mNEhWBs,4879
395
402
  dstack/_internal/server/services/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -423,10 +430,10 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
423
430
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
424
431
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
425
432
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
426
- dstack/_internal/server/statics/index.html,sha256=muVBl2rWgBSginZYqpj6UUYul4uP5yn3-17Im1aEdyM,10468
427
- dstack/_internal/server/statics/main-2ac66bfcbd2e39830b88.js,sha256=-Wm36zACnQ7vd0xw1HVxiJ_mD1U-FbCMJqR-pY5vNcQ,6203467
428
- dstack/_internal/server/statics/main-2ac66bfcbd2e39830b88.js.map,sha256=TpUtWdd0O_j1Ylrw9950x2F9CL-ZsovzXWD4M74Qy1w,8137484
429
- dstack/_internal/server/statics/main-ad5150a441de98cd8987.css,sha256=yI_fXTjWkI4AxHPG0NnFIAJbcX1kzLskED0wt2h0HuI,1296028
433
+ dstack/_internal/server/statics/index.html,sha256=3BqqXx8k6XRP4kYKcj-4h0EnhHTA6HcXcmijuEzqseQ,10468
434
+ dstack/_internal/server/statics/main-7510e71dfa9749a4e70e.css,sha256=crBuXqMqHxjUBz4ESOQLtRzot_irn6zYrZLf8Uj7gSk,1296121
435
+ dstack/_internal/server/statics/main-fe8fd9db55df8d10e648.js,sha256=DYwOYAwdEz8wUbv7GVGuDFwC2zAZg5qKEwKI1_R5dlE,6192701
436
+ dstack/_internal/server/statics/main-fe8fd9db55df8d10e648.js.map,sha256=K0gwTM9IZBYSuRFFPDWOSior62dC40TbdBH6D2n6bos,8122346
430
437
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
431
438
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
432
439
  dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
@@ -503,7 +510,7 @@ dstack/_internal/server/statics/static/media/logo.f602feeb138844eda97c8cb6414614
503
510
  dstack/_internal/server/statics/static/media/okta.12f178e6873a1100965f2a4dbd18fcec.svg,sha256=KqFI05gQM135zC1plF1WBRF2F7CyKL7km97WKsZjAHI,319
504
511
  dstack/_internal/server/statics/static/media/theme.3994c817bb7dda191c1c9640dee0bf42.svg,sha256=ZxFFBVZWuRLqmWH4zhwGLNtKjOzHj-5MGJRunFAtu1I,561
505
512
  dstack/_internal/server/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
506
- dstack/_internal/server/testing/common.py,sha256=xwIk9mNec_9OBvJYw_RH9kdOou0Hs8S0qxMor9SH2x4,28949
513
+ dstack/_internal/server/testing/common.py,sha256=LKoH9pD9cJoy3JsEbP4nureES_-PBw-wg685vZVx0Rs,29614
507
514
  dstack/_internal/server/testing/conf.py,sha256=-zhujfFjTHNfQDOK-hBck32By11c_kC0OeinB3esQGg,1902
508
515
  dstack/_internal/server/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
509
516
  dstack/_internal/server/utils/common.py,sha256=PbjXtqYy1taKXpyG5ys8cIrz9MXqc9dBAsR_9D1brrk,1414
@@ -530,7 +537,7 @@ dstack/api/_public/backends.py,sha256=IBeotauJzlte379LzRM6ByZCl_98QemGZsm3p_WX98
530
537
  dstack/api/_public/pools.py,sha256=wlTai0px6aQNeKyL-6nOil6DCj-GdozqqDGmnTg4ubw,1033
531
538
  dstack/api/_public/repos.py,sha256=LYWy1W3Z-2y_D82Jln6YzU2F_asPULGJq1GM9HAAMIc,6173
532
539
  dstack/api/_public/resources.py,sha256=lTQM2nb7_QB2RCwmpQlBkYkpiN_aWjgF78wI7Op_RlQ,2947
533
- dstack/api/_public/runs.py,sha256=3527ziltD9UNTDPMkaHHUXXQog2VLFXKQ0zgmRsnCb4,24718
540
+ dstack/api/_public/runs.py,sha256=wYxIlEKVHr-b1X-gUC1achBq-v1LNRBtP5Vg5mtnhGc,24719
534
541
  dstack/api/huggingface/__init__.py,sha256=oIrEij3wttLZ1yrywEGvCMd6zswMQrX5pPjrqdSi0UA,2201
535
542
  dstack/api/server/__init__.py,sha256=1Sw1bB8NItIFWlL1bdeUN1Tuwu3uaYOJWFrg1c4VULY,5801
536
543
  dstack/api/server/_backends.py,sha256=mMePYgFMHAUma3Gycx54VsaxAL_IFhBRcI4H4eWWMg0,1908
@@ -568,6 +575,8 @@ tests/_internal/core/backends/aws/test_resources.py,sha256=0Qz9YVjN874UWaZPFkVX9
568
575
  tests/_internal/core/backends/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
569
576
  tests/_internal/core/backends/azure/test_compute.py,sha256=PkckOfdGyVjOfqbE0uOUD92MlltKXxkAw0Wu1IbOVMQ,2134
570
577
  tests/_internal/core/backends/azure/test_resources.py,sha256=Bi3g0BgtOiTMC1vuU7rtELsey5E-5jmB30vk-jEJF9M,1715
578
+ tests/_internal/core/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
579
+ tests/_internal/core/backends/base/test_compute.py,sha256=LkeECcBu5SPNbysLHJWDGS_8mTbSZ1L5-ZD0Dh4Fv18,2118
571
580
  tests/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
572
581
  tests/_internal/core/backends/gcp/test_resources.py,sha256=7nkVM9w-cVZov1M6SmOKm5W-JhooQCIgph4i-MGZx3c,1638
573
582
  tests/_internal/core/backends/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -604,7 +613,7 @@ tests/_internal/proxy/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
604
613
  tests/_internal/proxy/lib/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
605
614
  tests/_internal/proxy/lib/routers/test_model_proxy.py,sha256=xPCQ9MGBNvRH8rhKZkvkcugxPzluySgErWXE3QsoPjg,8926
606
615
  tests/_internal/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
607
- tests/_internal/server/conftest.py,sha256=jUinigvS7Ryy-9hGzTIBkgm8vs55m_y1VLa9edEhrp4,1491
616
+ tests/_internal/server/conftest.py,sha256=5FbBihFl5tznVw0XjwSqI5P32jV12_i75UBt80V7wxo,1522
608
617
  tests/_internal/server/test_app.py,sha256=nIDp8nlWBaW6yQRhGtQZAwOVM55maF8vLw1YqYXIUTQ,605
609
618
  tests/_internal/server/test_migrations.py,sha256=8MV1uVSCY-UG_dG6M4a7ekSsGi9CqHjobopc-H5-WKg,2107
610
619
  tests/_internal/server/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -614,22 +623,22 @@ tests/_internal/server/background/tasks/test_process_gateways.py,sha256=h7jzDFQp
614
623
  tests/_internal/server/background/tasks/test_process_instances.py,sha256=-ATbgOT8XAeqGmPn4XPlSJzxnrm0haAJhX13nWOBOtM,24816
615
624
  tests/_internal/server/background/tasks/test_process_metrics.py,sha256=eirq386mVZqX_PqctuX7CxO38Prwy8RH2UesYXo3CnQ,5083
616
625
  tests/_internal/server/background/tasks/test_process_placement_groups.py,sha256=shHqZvS8QoNwQe8J29-aHk2X2HqX-gsxcQiZevU8yuY,1528
617
- tests/_internal/server/background/tasks/test_process_running_jobs.py,sha256=zm0eGL3MY5H7YAZuKO0fTqyU0Tb-W2lGniHN6XwOXoE,25542
626
+ tests/_internal/server/background/tasks/test_process_running_jobs.py,sha256=XzbP5WIJtgYSm7xcjPwuw6uAVAUrxVduO2nrjdmkQV4,25542
618
627
  tests/_internal/server/background/tasks/test_process_runs.py,sha256=Yv6f2CDZ-ejDGo7uOKyyAGxYLsvqyjNo4Zw1cCQbjgM,14489
619
628
  tests/_internal/server/background/tasks/test_process_submitted_jobs.py,sha256=Sf4aDa1ZYw5Sz3xAw8K0hoI-VDesv7Ew3gZdAzQvj_4,24451
620
629
  tests/_internal/server/background/tasks/test_process_submitted_volumes.py,sha256=njfRDdDzVtDL8rech_004Wf5z5PpoQVWFufKh1yUyYY,2171
621
630
  tests/_internal/server/background/tasks/test_process_terminating_jobs.py,sha256=VZsfP1NVxkcLSNWfEXDFe_vQZUQfuG0B5i-krXKP_IQ,14147
622
631
  tests/_internal/server/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
623
- tests/_internal/server/routers/test_backends.py,sha256=4bY8oMMKB3xIRWUfVIUcI4dhDz1ukcpEeWOLllxmPUw,65231
632
+ tests/_internal/server/routers/test_backends.py,sha256=d95ZS97zSRHdmmDTxIPzYQWU-hb2_DvlNo2lcF0NNzw,65273
624
633
  tests/_internal/server/routers/test_fleets.py,sha256=ap3Jjg2iiwuklosu2_-xx-cJBlM6uZN5CQfGudORPf0,35105
625
634
  tests/_internal/server/routers/test_gateways.py,sha256=bb0pzm7uu1X3V8755b7ZZUHPSLk0Rd6CjoMCdionWVA,23535
626
635
  tests/_internal/server/routers/test_instances.py,sha256=BAWSCjXhe4N1px6BvPEcdAKrQHL5CkrHWvuGrzPRapc,9516
627
- tests/_internal/server/routers/test_logs.py,sha256=ADugQZhT2wvZlhnTQUaSkUFbL-kpW2s0qf29onxH7vA,3981
636
+ tests/_internal/server/routers/test_logs.py,sha256=NZwyJlgjMOGq4XEx7-VDjTpniYPhZpsbZvB0dTawaog,3989
628
637
  tests/_internal/server/routers/test_metrics.py,sha256=NSdb_x_1Nwsqgrf6KXBf257qd29CXcSN30yk_BQx2CE,5923
629
638
  tests/_internal/server/routers/test_pools.py,sha256=QQ00pqFVUCo1bSfwWcA2UztyI6Fr0bfU1rj_TnEnVG0,25275
630
639
  tests/_internal/server/routers/test_projects.py,sha256=Pa_YL9lYhYt06TFmuZFEf9pxc-K3fM9L29ULf4gCELw,23950
631
640
  tests/_internal/server/routers/test_repos.py,sha256=4O4mCDlAPh8xJU_XWtwLhFWRkoTxXvZC1N2DLPyz2AI,17225
632
- tests/_internal/server/routers/test_runs.py,sha256=t6tuvN8JHKSKgd_PRTlPo3VzsJ3aE_EmW9f8cczxQ4M,71547
641
+ tests/_internal/server/routers/test_runs.py,sha256=bwp0SGzD83IyIYg_nXwGOsG9VUt8G8YRYPhIiJTh48k,71547
633
642
  tests/_internal/server/routers/test_server.py,sha256=ROkuRNNJEkMQuK8guZ3Qy3iRRfiWvPIJJJDc09BI0D4,489
634
643
  tests/_internal/server/routers/test_users.py,sha256=5QSLvfn9SroGsZoBGmSTEaaqJcdEO8EUUy_YuvLL8ss,12787
635
644
  tests/_internal/server/routers/test_volumes.py,sha256=fVv7sVo9POFImal9Mlkaw8CJOAR67S_eYHxIReHebBU,16241
@@ -637,7 +646,7 @@ tests/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
637
646
  tests/_internal/server/services/test_config.py,sha256=KfPyYSSsLaQszBAgqYeM2Tt5YkRiV-at0ik86ecdrtE,5168
638
647
  tests/_internal/server/services/test_docker.py,sha256=QsnoVJUnvzcd1Tpw0UtKXtDSCr9nh_jmtVSkOi7J4ug,5628
639
648
  tests/_internal/server/services/test_fleets.py,sha256=WqK9Bs3Nfew45n4WunZhvIvCw0VHJ2w5t0-4CakxFgU,8222
640
- tests/_internal/server/services/test_logs.py,sha256=QmaI07u9O0czwH8J2eZO3mOYnutAtIrDTUrF9CJLdwU,29647
649
+ tests/_internal/server/services/test_logs.py,sha256=z1t2rKe-egRLfK78sH6SCMB2ULwh3F8XgaB1np6qb88,29754
641
650
  tests/_internal/server/services/test_offers.py,sha256=t0nQNjjm-fvIqHIOA_99hokrdTXwpYrgzjaQjqJXs8w,7814
642
651
  tests/_internal/server/services/test_pools.py,sha256=aPF4R6_VCeDR4AcjQ0H2J1BKivoVs-JUNQBJZ-IYdPg,7436
643
652
  tests/_internal/server/services/test_repos.py,sha256=o2D0xmOPYaiwDq6nNJNtqYMSuSz_xKJ_ZChVOvWIhJY,14289
@@ -669,9 +678,9 @@ tests/_internal/utils/test_path.py,sha256=rzS-1YCxsFUocBe42dghLOMFNymPruGrA7bqFZ
669
678
  tests/_internal/utils/test_ssh.py,sha256=V-cBFPhD--9eM9d1uQQgpj2gnYLA3c43f4cX9uJ6E-U,1743
670
679
  tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
671
680
  tests/api/test_utils.py,sha256=SSSqHcNE5cZVqDq4n2sKZthRoXaZ_Bx7z1AAN5xTM9s,391
672
- dstack-0.18.42.dist-info/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
673
- dstack-0.18.42.dist-info/METADATA,sha256=vSyb16zzc0XeDvb0drJPn91GJqIajnyIKNc8RY3THtE,17690
674
- dstack-0.18.42.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
675
- dstack-0.18.42.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
676
- dstack-0.18.42.dist-info/top_level.txt,sha256=3BrIO1zrqxT9P20ymhRM6k15meZXzbPL6ykBlDZG2_k,13
677
- dstack-0.18.42.dist-info/RECORD,,
681
+ dstack-0.18.43.dist-info/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
682
+ dstack-0.18.43.dist-info/METADATA,sha256=3xpGQbB7LyD6cW0q9f9y-VqJEzyi_HlhHbtCenaEdng,17769
683
+ dstack-0.18.43.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
684
+ dstack-0.18.43.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
685
+ dstack-0.18.43.dist-info/top_level.txt,sha256=3BrIO1zrqxT9P20ymhRM6k15meZXzbPL6ykBlDZG2_k,13
686
+ dstack-0.18.43.dist-info/RECORD,,
File without changes
@@ -0,0 +1,56 @@
1
+ import re
2
+
3
+ from dstack._internal.core.backends.base.compute import (
4
+ generate_unique_backend_name,
5
+ generate_unique_gateway_instance_name,
6
+ generate_unique_instance_name,
7
+ generate_unique_volume_name,
8
+ )
9
+ from dstack._internal.server.testing.common import (
10
+ get_gateway_compute_configuration,
11
+ get_instance_configuration,
12
+ get_volume,
13
+ )
14
+
15
+
16
+ class TestGenerateUniqueInstanceName:
17
+ def test_generates_name(self):
18
+ configuration = get_instance_configuration(
19
+ project_name="project1", instance_name="my-instance"
20
+ )
21
+ name = generate_unique_instance_name(configuration, 60)
22
+ assert re.match(r"^dstack-project1-my-instance-[a-z0-9]{8}$", name)
23
+
24
+
25
+ class TestGenerateUniqueGatewayInstanceName:
26
+ def test_generates_name(self):
27
+ configuration = get_gateway_compute_configuration(
28
+ project_name="project1", instance_name="my-gateway"
29
+ )
30
+ name = generate_unique_gateway_instance_name(configuration, 60)
31
+ assert re.match(r"^dstack-project1-my-gateway-[a-z0-9]{8}$", name)
32
+
33
+
34
+ class TestGenerateUniqueVolumeName:
35
+ def test_generates_name(self):
36
+ volume = get_volume(project_name="project1", name="my-volume")
37
+ name = generate_unique_volume_name(volume, 60)
38
+ assert re.match(r"^dstack-project1-my-volume-[a-z0-9]{8}$", name)
39
+
40
+
41
+ class TestGenerateUniqueBackendName:
42
+ def test_generates_name_with_project(self):
43
+ name = generate_unique_backend_name("instance", "project", 60)
44
+ assert re.match(r"^dstack-project-instance-[a-z0-9]{8}$", name)
45
+
46
+ def test_generates_name_without_project(self):
47
+ name = generate_unique_backend_name("instance", None, 60)
48
+ assert re.match(r"^dstack-instance-[a-z0-9]{8}$", name)
49
+
50
+ def test_truncates_long_names(self):
51
+ name = generate_unique_backend_name("a" * 100, "project", 30)
52
+ assert re.match(r"^dstack-project-aaaaaa-[a-z0-9]{8}$", name)
53
+
54
+ def test_validates_project_name(self):
55
+ name = generate_unique_backend_name("instance", "invalid_project!@", 60)
56
+ assert re.match(r"^dstack-instance-[a-z0-9]{8}$", name)
@@ -335,7 +335,7 @@ class TestProcessRunningJobs:
335
335
  name="test-run-0-0",
336
336
  registry_username="",
337
337
  registry_password="",
338
- image_name="dstackai/base:py3.13-0.6-cuda-12.1",
338
+ image_name="dstackai/base:py3.13-0.7-cuda-12.1",
339
339
  container_user="root",
340
340
  privileged=privileged,
341
341
  gpu=None,
@@ -8,6 +8,7 @@ from dstack._internal.server.main import app
8
8
  from dstack._internal.server.services import encryption as encryption # import for side-effect
9
9
  from dstack._internal.server.services import logs as logs_services
10
10
  from dstack._internal.server.services.docker import ImageConfig, ImageConfigObject
11
+ from dstack._internal.server.services.logs.filelog import FileLogStorage
11
12
  from dstack._internal.server.testing.conf import postgres_container, session, test_db # noqa: F401
12
13
 
13
14
 
@@ -18,13 +19,11 @@ def client(event_loop):
18
19
 
19
20
 
20
21
  @pytest.fixture
21
- def test_log_storage(
22
- tmp_path: Path, monkeypatch: pytest.MonkeyPatch
23
- ) -> logs_services.FileLogStorage:
22
+ def test_log_storage(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> FileLogStorage:
24
23
  root = tmp_path / "test_logs"
25
24
  root.mkdir()
26
- storage = logs_services.FileLogStorage(root)
27
- monkeypatch.setattr(logs_services, "_default_log_storage", storage)
25
+ storage = FileLogStorage(root)
26
+ monkeypatch.setattr(logs_services, "_log_storage", storage)
28
27
  return storage
29
28
 
30
29