dstack 0.19.11rc2__py3-none-any.whl → 0.19.12__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.
- dstack/_internal/cli/commands/offer.py +2 -0
- dstack/_internal/cli/services/configurators/run.py +43 -42
- dstack/_internal/cli/utils/run.py +10 -26
- dstack/_internal/core/backends/template/configurator.py.jinja +1 -6
- dstack/_internal/core/backends/template/models.py.jinja +4 -0
- dstack/_internal/core/models/configurations.py +1 -1
- dstack/_internal/core/models/fleets.py +6 -1
- dstack/_internal/core/models/profiles.py +43 -3
- dstack/_internal/core/models/repos/local.py +19 -13
- dstack/_internal/core/models/runs.py +78 -45
- dstack/_internal/server/background/tasks/process_running_jobs.py +47 -12
- dstack/_internal/server/background/tasks/process_runs.py +14 -1
- dstack/_internal/server/services/fleets.py +2 -2
- dstack/_internal/server/services/gateways/__init__.py +1 -1
- dstack/_internal/server/services/plugins.py +3 -2
- dstack/_internal/server/services/runner/client.py +4 -1
- dstack/_internal/server/services/runs.py +2 -2
- dstack/_internal/server/services/volumes.py +1 -1
- dstack/_internal/server/statics/index.html +1 -1
- dstack/_internal/server/statics/{main-5b9786c955b42bf93581.js → main-b0e80f8e26a168c129e9.js} +72 -25
- dstack/_internal/server/statics/{main-5b9786c955b42bf93581.js.map → main-b0e80f8e26a168c129e9.js.map} +1 -1
- dstack/_internal/server/testing/common.py +2 -1
- dstack/_internal/utils/common.py +4 -0
- dstack/api/server/_fleets.py +5 -1
- dstack/api/server/_runs.py +8 -0
- dstack/version.py +1 -1
- {dstack-0.19.11rc2.dist-info → dstack-0.19.12.dist-info}/METADATA +2 -1
- {dstack-0.19.11rc2.dist-info → dstack-0.19.12.dist-info}/RECORD +31 -32
- dstack/_internal/utils/ignore.py +0 -92
- {dstack-0.19.11rc2.dist-info → dstack-0.19.12.dist-info}/WHEEL +0 -0
- {dstack-0.19.11rc2.dist-info → dstack-0.19.12.dist-info}/entry_points.txt +0 -0
- {dstack-0.19.11rc2.dist-info → dstack-0.19.12.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -308,12 +308,13 @@ async def create_job(
|
|
|
308
308
|
) -> JobModel:
|
|
309
309
|
run_spec = RunSpec.parse_raw(run.run_spec)
|
|
310
310
|
job_spec = (await get_job_specs_from_run_spec(run_spec, replica_num=replica_num))[0]
|
|
311
|
+
job_spec.job_num = job_num
|
|
311
312
|
job = JobModel(
|
|
312
313
|
project_id=run.project_id,
|
|
313
314
|
run_id=run.id,
|
|
314
315
|
run_name=run.run_name,
|
|
315
316
|
job_num=job_num,
|
|
316
|
-
job_name=run.run_name + f"-
|
|
317
|
+
job_name=run.run_name + f"-{job_num}-{replica_num}",
|
|
317
318
|
replica_num=replica_num,
|
|
318
319
|
submission_num=submission_num,
|
|
319
320
|
submitted_at=submitted_at,
|
dstack/_internal/utils/common.py
CHANGED
|
@@ -314,3 +314,7 @@ def make_proxy_url(server_url: str, proxy_url: str) -> str:
|
|
|
314
314
|
path=concat_url_path(server.path, proxy.path),
|
|
315
315
|
)
|
|
316
316
|
return proxy.geturl()
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def list_enum_values_for_annotation(enum_class: type[enum.Enum]) -> str:
|
|
320
|
+
return ", ".join(f"`{e.value}`" for e in enum_class)
|
dstack/api/server/_fleets.py
CHANGED
|
@@ -83,7 +83,7 @@ def _get_apply_plan_excludes(plan_input: ApplyFleetPlanInput) -> Dict:
|
|
|
83
83
|
apply_plan_excludes = {}
|
|
84
84
|
spec_excludes = _get_fleet_spec_excludes(plan_input.spec)
|
|
85
85
|
if spec_excludes:
|
|
86
|
-
apply_plan_excludes["spec"] =
|
|
86
|
+
apply_plan_excludes["spec"] = spec_excludes
|
|
87
87
|
current_resource = plan_input.current_resource
|
|
88
88
|
if current_resource is not None:
|
|
89
89
|
current_resource_excludes = {}
|
|
@@ -126,6 +126,10 @@ def _get_fleet_spec_excludes(fleet_spec: FleetSpec) -> Optional[Dict]:
|
|
|
126
126
|
configuration_excludes["tags"] = True
|
|
127
127
|
if profile.tags is None:
|
|
128
128
|
profile_excludes.add("tags")
|
|
129
|
+
if profile.startup_order is None:
|
|
130
|
+
profile_excludes.add("startup_order")
|
|
131
|
+
if profile.stop_criteria is None:
|
|
132
|
+
profile_excludes.add("stop_criteria")
|
|
129
133
|
if configuration_excludes:
|
|
130
134
|
spec_excludes["configuration"] = configuration_excludes
|
|
131
135
|
if profile_excludes:
|
dstack/api/server/_runs.py
CHANGED
|
@@ -188,6 +188,14 @@ def _get_run_spec_excludes(run_spec: RunSpec) -> Optional[Dict]:
|
|
|
188
188
|
configuration_excludes["shell"] = True
|
|
189
189
|
if configuration.priority is None:
|
|
190
190
|
configuration_excludes["priority"] = True
|
|
191
|
+
if configuration.startup_order is None:
|
|
192
|
+
configuration_excludes["startup_order"] = True
|
|
193
|
+
if profile is not None and profile.startup_order is None:
|
|
194
|
+
profile_excludes.add("startup_order")
|
|
195
|
+
if configuration.stop_criteria is None:
|
|
196
|
+
configuration_excludes["stop_criteria"] = True
|
|
197
|
+
if profile is not None and profile.stop_criteria is None:
|
|
198
|
+
profile_excludes.add("stop_criteria")
|
|
191
199
|
|
|
192
200
|
if configuration_excludes:
|
|
193
201
|
spec_excludes["configuration"] = configuration_excludes
|
dstack/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dstack
|
|
3
|
-
Version: 0.19.
|
|
3
|
+
Version: 0.19.12
|
|
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,6 +22,7 @@ Requires-Dist: cursor
|
|
|
22
22
|
Requires-Dist: filelock
|
|
23
23
|
Requires-Dist: gitpython
|
|
24
24
|
Requires-Dist: gpuhunt==0.1.6
|
|
25
|
+
Requires-Dist: ignore-python>=0.2.0
|
|
25
26
|
Requires-Dist: jsonschema
|
|
26
27
|
Requires-Dist: packaging
|
|
27
28
|
Requires-Dist: paramiko>=3.2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
dstack/version.py,sha256=
|
|
2
|
+
dstack/version.py,sha256=eZrGQsCvpqosKeZL0aLtMA0YuPk3m-HVoj8LhGs7QMs,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=GOqfcLEONWC1hGU36IYPuOhJXP_qC3Y6d2SQge_NdpY,953
|
|
@@ -16,7 +16,7 @@ dstack/_internal/cli/commands/gateway.py,sha256=DcD6P_MvXbSL9aXkLX9hgGYSAzARjgY6
|
|
|
16
16
|
dstack/_internal/cli/commands/init.py,sha256=bLhSlViNWtjflB6xNq_PuCR2o2A06h222luh1NeUgVA,1169
|
|
17
17
|
dstack/_internal/cli/commands/logs.py,sha256=o8ehPAKM12Xn9thg2jjnYdr7_wKqF-00ziVry8IVVwE,1528
|
|
18
18
|
dstack/_internal/cli/commands/metrics.py,sha256=ZS_dHD4_YK135J09xKpVTY_3CXzhj8QhDo18Ail9Pas,5862
|
|
19
|
-
dstack/_internal/cli/commands/offer.py,sha256=
|
|
19
|
+
dstack/_internal/cli/commands/offer.py,sha256=6gem4Wz6WJmHur9-eiC65JwqObrGIAybROCAp5pr59k,4221
|
|
20
20
|
dstack/_internal/cli/commands/project.py,sha256=V8gJwQWQGvGKQJPUyce_M7Ij_B7bOxYzo2IQgkLLHFE,6151
|
|
21
21
|
dstack/_internal/cli/commands/ps.py,sha256=5RU4mcL4-FT4PcXktfKb4htCOPqia7mIuVGgfK7x9lY,1894
|
|
22
22
|
dstack/_internal/cli/commands/server.py,sha256=4K0tp_tIUStCEMpWrUkRLwe27IgAt99RPpk2H1AWnXk,2817
|
|
@@ -32,14 +32,14 @@ dstack/_internal/cli/services/configurators/__init__.py,sha256=z94VPBFqybP8Zpwy3
|
|
|
32
32
|
dstack/_internal/cli/services/configurators/base.py,sha256=bGfde2zoma28lLE8MUACO4-NKT1CdJJQJoXrzjpz0mQ,3360
|
|
33
33
|
dstack/_internal/cli/services/configurators/fleet.py,sha256=jm4tNH6QQVplLdboCTlvRYUee3nZ0UYb_qLTrvtYVYM,14049
|
|
34
34
|
dstack/_internal/cli/services/configurators/gateway.py,sha256=czB2s89s7IowOmWnpDwWErPAUlW3FvFMizImhrkQiBM,8927
|
|
35
|
-
dstack/_internal/cli/services/configurators/run.py,sha256=
|
|
35
|
+
dstack/_internal/cli/services/configurators/run.py,sha256=oNjxxUeVzvuuEwot7WVjDbQqGxVfO6BoB7z6K-jKA2E,25248
|
|
36
36
|
dstack/_internal/cli/services/configurators/volume.py,sha256=riMXLQbgvHIIFwLKdHfad-_0iE9wE3G_rUmXU5P3ZS8,8519
|
|
37
37
|
dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
38
|
dstack/_internal/cli/utils/common.py,sha256=rfmzqrsgR3rXW3wj0vxDdvrhUUg2aIy4A6E9MZbd55g,1763
|
|
39
39
|
dstack/_internal/cli/utils/fleet.py,sha256=ch-LN1X9boSm-rFLW4mAJRmz0XliLhH0LvKD2DqSt2g,3942
|
|
40
40
|
dstack/_internal/cli/utils/gateway.py,sha256=qMYa1NTAT_O98x2_mSyWDRbiHj5fqt6xUXFh9NIUwAM,1502
|
|
41
41
|
dstack/_internal/cli/utils/rich.py,sha256=Gx1MJU929kMKsbdo9qF7XHARNta2426Ssb-xMLVhwbQ,5710
|
|
42
|
-
dstack/_internal/cli/utils/run.py,sha256=
|
|
42
|
+
dstack/_internal/cli/utils/run.py,sha256=X518VI3gjBkAfZt-1ErhuzQpCLATkZm8r_cf9L_Y6IE,8800
|
|
43
43
|
dstack/_internal/cli/utils/updates.py,sha256=pGr5keEmHojnbY0ayjWL4GWTz4ParY6fP85tHpJ11pI,3043
|
|
44
44
|
dstack/_internal/cli/utils/volume.py,sha256=mU9I06dVMFbpjfkefxrZNoSWadKLoib3U14rHudNQN4,1975
|
|
45
45
|
dstack/_internal/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -133,8 +133,8 @@ dstack/_internal/core/backends/runpod/models.py,sha256=W3nO4sjvvWtfKYDZDVJ8oBSsg
|
|
|
133
133
|
dstack/_internal/core/backends/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
134
|
dstack/_internal/core/backends/template/backend.py.jinja,sha256=jqSUr05lKHSuGq2MCk4tHob1TfGiSSsHox1GuEz30zU,704
|
|
135
135
|
dstack/_internal/core/backends/template/compute.py.jinja,sha256=jLFZ_EMEjlgu6y3VJtvXs4qNXZmytZhl5JzJVM04lIc,3319
|
|
136
|
-
dstack/_internal/core/backends/template/configurator.py.jinja,sha256=
|
|
137
|
-
dstack/_internal/core/backends/template/models.py.jinja,sha256=
|
|
136
|
+
dstack/_internal/core/backends/template/configurator.py.jinja,sha256=W2Ycp__DZoWW-CligjQTJL6iuEQdT6mXmrb7Mi3jYfw,2500
|
|
137
|
+
dstack/_internal/core/backends/template/models.py.jinja,sha256=dhJd8uWoMvAHAsPpDMPNtdMKzJTIoXDtsGC0NCQ3Y08,2061
|
|
138
138
|
dstack/_internal/core/backends/tensordock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
139
|
dstack/_internal/core/backends/tensordock/api_client.py,sha256=NUEKgu6JY6kqQXRqsghT-aBf7sNstHQo7J1WmqL-Qfs,3872
|
|
140
140
|
dstack/_internal/core/backends/tensordock/backend.py,sha256=KT5bRuD3KttEqiNNqQpW5f6nX7Qez-L74TBmYKy3puI,606
|
|
@@ -156,18 +156,18 @@ dstack/_internal/core/backends/vultr/models.py,sha256=TkqK_lW6w5k_7wsoFiKDb6NXuT
|
|
|
156
156
|
dstack/_internal/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
157
157
|
dstack/_internal/core/models/common.py,sha256=XWd79dmFGMrdpTcStH5fVmNXCKE0s7FsIorPL0saQ8w,2138
|
|
158
158
|
dstack/_internal/core/models/config.py,sha256=JJ7rT7dztzTWCY5TkoyxXxTvG5D4IFYhGe7EzwkLOWQ,581
|
|
159
|
-
dstack/_internal/core/models/configurations.py,sha256=
|
|
159
|
+
dstack/_internal/core/models/configurations.py,sha256=PA_u1gdTBCwKKIiGo7tH95Wv_ZZYX89mTCBOKs5cYko,19069
|
|
160
160
|
dstack/_internal/core/models/envs.py,sha256=yq84YRFBILOy4x3XnGcTgYpbZ69eFTCQPgBCr9Ndov4,4969
|
|
161
|
-
dstack/_internal/core/models/fleets.py,sha256=
|
|
161
|
+
dstack/_internal/core/models/fleets.py,sha256=aqDVlZMc71NjLrzwBF3qz-dHzocQT5Qip7QWl8ZbKuA,12263
|
|
162
162
|
dstack/_internal/core/models/gateways.py,sha256=_O8EWwHWLdgNoWY4P4u71KM-uEr5DDp42LXfyv1qMDI,4054
|
|
163
163
|
dstack/_internal/core/models/instances.py,sha256=Qh4QFZYQZxxn2HokafZiQyTiiwjiYuL9atxGlw6K980,5451
|
|
164
164
|
dstack/_internal/core/models/logs.py,sha256=Lsmtd_NrnChMjBJahUZpFb1j8Xobix9FHWf1L47FOGs,443
|
|
165
165
|
dstack/_internal/core/models/metrics.py,sha256=Xb8hCXUL-ncQ3PMsErIUAJTe9gwh5jyrQ4UQoZbibsc,269
|
|
166
166
|
dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7VSAtR_xoFvPVM,720
|
|
167
|
-
dstack/_internal/core/models/profiles.py,sha256=
|
|
167
|
+
dstack/_internal/core/models/profiles.py,sha256=SSbslQfKoa6Sg8A_Z26xDNTujGZc51we11G5rlqfBpY,11659
|
|
168
168
|
dstack/_internal/core/models/projects.py,sha256=H5ZZRiyUEKifpTFAhl45KBi5ly7ooE0WmI329myK360,643
|
|
169
169
|
dstack/_internal/core/models/resources.py,sha256=rsf6hAhi5bfSb_Z9VcS3UoEG0G8Ohl6ekyrOStLOAqw,14114
|
|
170
|
-
dstack/_internal/core/models/runs.py,sha256=
|
|
170
|
+
dstack/_internal/core/models/runs.py,sha256=rOse2_uXcZL1poRI6OKegzC7N52OogpQ4r_pgByQ7J0,20796
|
|
171
171
|
dstack/_internal/core/models/secrets.py,sha256=IQyemsNpSzqOCB-VlVTuc4gyPFmXXO4mhko0Ur0ey3I,221
|
|
172
172
|
dstack/_internal/core/models/server.py,sha256=Hkc1v2s3KOiwslsWVmhUOAzcSeREoG-HD1SzSX9WUGg,152
|
|
173
173
|
dstack/_internal/core/models/services.py,sha256=2Hpi7j0Q1shaf_0wd0C0044AJAmuYi-D3qx3PH849oI,3076
|
|
@@ -178,7 +178,7 @@ dstack/_internal/core/models/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
178
178
|
dstack/_internal/core/models/backends/base.py,sha256=Fbhs90NBMceXhjORwj7c2_pVriapCGSUMBFwuR-wRIg,1091
|
|
179
179
|
dstack/_internal/core/models/repos/__init__.py,sha256=7Qo1QgJ852LklUuM-mlCNFodp_XrQ4iqV7uRPiX_qm0,885
|
|
180
180
|
dstack/_internal/core/models/repos/base.py,sha256=nErlSR3AbG9fwDE5vuJK5DIrP8JB3fG8a7mXqosJ9gY,846
|
|
181
|
-
dstack/_internal/core/models/repos/local.py,sha256=
|
|
181
|
+
dstack/_internal/core/models/repos/local.py,sha256=zKnEOyN7hSDQ7EKn8q9aJ3uikiTTtGdGEN_3896HTTc,2913
|
|
182
182
|
dstack/_internal/core/models/repos/remote.py,sha256=r50v39KHhoVMfdnIHe58VJEi2Abm-37Y1ttXigdjc9o,11553
|
|
183
183
|
dstack/_internal/core/models/repos/virtual.py,sha256=8g4hGSQ6Z8oDKoF6cj2souJ2A5vRop5OyFCQ5z84rw4,2582
|
|
184
184
|
dstack/_internal/core/services/__init__.py,sha256=UVVcj26WYVgo7jHzD07sNRqSOO7zA3QzQv-9LnCDqR4,415
|
|
@@ -262,8 +262,8 @@ dstack/_internal/server/background/tasks/process_instances.py,sha256=E1NLac4ubiF
|
|
|
262
262
|
dstack/_internal/server/background/tasks/process_metrics.py,sha256=aJPHnmKQE19JVxJVwGFyyK7buUcbp9Smw9CkFO2DPAk,6135
|
|
263
263
|
dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=gJ8Um3Vx-brazHVWdtVXPnov4rwvDr-0Vn1Voq1cYBQ,4108
|
|
264
264
|
dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=9VoGFqdiXcVkCi_NV1VqQdqllDkB0bHIqOHKMIZK1Fg,5183
|
|
265
|
-
dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=
|
|
266
|
-
dstack/_internal/server/background/tasks/process_runs.py,sha256=
|
|
265
|
+
dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=8nzH9H2Kuaa1g7-SBCdhUWqDztlaQmnECyWqK0S9OaE,37636
|
|
266
|
+
dstack/_internal/server/background/tasks/process_runs.py,sha256=Sz_DQdi9Vd4VDbIzOC3lSExopxdnW5kcrDXOeqOR-2o,18522
|
|
267
267
|
dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=tLLpdtLHN2xC6Ohc6f0we3oevw3pBt0_XrsufaFtIvE,27383
|
|
268
268
|
dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=0Z3Q409RwSxOL_pgK8JktBthjtESEUH3ahwTLsTdYPk,3800
|
|
269
269
|
dstack/_internal/server/background/tasks/process_volumes.py,sha256=206rbT4ICeZtEmqh_94Rry_fgHfFLLaSEX9W-svwFk4,5089
|
|
@@ -372,7 +372,7 @@ dstack/_internal/server/security/permissions.py,sha256=FJ_8YPhjmebA4jQjtQoAGEaj1
|
|
|
372
372
|
dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
373
373
|
dstack/_internal/server/services/config.py,sha256=yo8njslwfS7_blhbPPhOtzCMyg8N_mmFSw5aPvirSzw,10691
|
|
374
374
|
dstack/_internal/server/services/docker.py,sha256=zAvjFHxIP03Td92NzbGEScz0piLjloE60tQ7vz0AeCA,5328
|
|
375
|
-
dstack/_internal/server/services/fleets.py,sha256=
|
|
375
|
+
dstack/_internal/server/services/fleets.py,sha256=9UL9mHo0IJhYrxiFHQUaLUA61PAQQ8gGwYNHpknlVqU,26599
|
|
376
376
|
dstack/_internal/server/services/instances.py,sha256=4feu9RfixOIVsLoFPHiYYUe0L6sf3v3h1asTBSF5cyc,18686
|
|
377
377
|
dstack/_internal/server/services/locking.py,sha256=7JUgNSplKRx7dxC4LIpmWw81agUtslEDTeDiNMPbAVg,3013
|
|
378
378
|
dstack/_internal/server/services/logging.py,sha256=Nu1628kW2hqB__N0Eyr07wGWjVWxfyJnczonTJ72kSM,417
|
|
@@ -380,15 +380,15 @@ dstack/_internal/server/services/metrics.py,sha256=jKLy1jSCVR_crqVu_CmsOMbvMkucW
|
|
|
380
380
|
dstack/_internal/server/services/offers.py,sha256=4hhqLzmo14_IY84FSDG59Sib1DrmTAOk-_q8M4aYoLU,7737
|
|
381
381
|
dstack/_internal/server/services/permissions.py,sha256=l7Ngdelmn65vjw13NcOdaC6lBYMRuSw6FbHzYwdK3nE,1005
|
|
382
382
|
dstack/_internal/server/services/placement.py,sha256=U-7z4kJ6ZyrCXzkDychWoOhniz19ooFwiNI2InoTLls,2420
|
|
383
|
-
dstack/_internal/server/services/plugins.py,sha256=
|
|
383
|
+
dstack/_internal/server/services/plugins.py,sha256=KgBqBUqxjQirRcYNuXVetE4OQj0EPkdC7ccbrNV1WQE,3825
|
|
384
384
|
dstack/_internal/server/services/projects.py,sha256=Je1iWZ-ArmyFxK1yMUzod5WRXyiIDxtuVp6pHcdctTQ,14988
|
|
385
385
|
dstack/_internal/server/services/prometheus.py,sha256=xq5G-Q2BJup9lS2F6__0wUVTs-k1Gr3dYclGzo2WoWo,12474
|
|
386
386
|
dstack/_internal/server/services/repos.py,sha256=f9ztN7jz_2gvD9hXF5sJwWDVyG2-NHRfjIdSukowPh8,9342
|
|
387
387
|
dstack/_internal/server/services/resources.py,sha256=VRFOih_cMJdc0c2m9nSGsX8vWAJQV3M6N87aqS_JXfw,699
|
|
388
|
-
dstack/_internal/server/services/runs.py,sha256=
|
|
388
|
+
dstack/_internal/server/services/runs.py,sha256=7nj4iQ6CZT3SEW9h3Vb8CBV65MUSSeQfZwgP_J4YlMo,39179
|
|
389
389
|
dstack/_internal/server/services/storage.py,sha256=6I0xI_3_RpJNbKZwHjDnjrEwXGdHfiaeb5li15T-M1I,1884
|
|
390
390
|
dstack/_internal/server/services/users.py,sha256=W-5xL7zsHNjeG7BBK54RWGvIrBOrw-FF0NcG_z9qhoE,7466
|
|
391
|
-
dstack/_internal/server/services/volumes.py,sha256=
|
|
391
|
+
dstack/_internal/server/services/volumes.py,sha256=vxjFn3ijrvwi9-aXipT0iQgNjgebdwcBRn1mKFL9zAQ,16244
|
|
392
392
|
dstack/_internal/server/services/backends/__init__.py,sha256=Aqo1GoqhZ_FsLEkCcBrvReKSq6E5w4QbBLrDXfGjiKU,13154
|
|
393
393
|
dstack/_internal/server/services/backends/handlers.py,sha256=j-MhBxrpdepoDG7f2tApjFnE23RVO5I15-hxHyOWnew,3251
|
|
394
394
|
dstack/_internal/server/services/encryption/__init__.py,sha256=3kCw_cxC3-Un1OIofdW5Gqsm0ZCXXTlGz09cULBx_uc,3155
|
|
@@ -396,7 +396,7 @@ dstack/_internal/server/services/encryption/keys/__init__.py,sha256=47DEQpj8HBSa
|
|
|
396
396
|
dstack/_internal/server/services/encryption/keys/aes.py,sha256=2He1p2_Rg6hnCeLIGJo-Yfdsij7so_338oY49RXuL3Q,2276
|
|
397
397
|
dstack/_internal/server/services/encryption/keys/base.py,sha256=mqumJiidoexUPoqxhQG6J_SpC1WGYwkdjKm1MUWnXo8,352
|
|
398
398
|
dstack/_internal/server/services/encryption/keys/identity.py,sha256=ryb_YSV6u4c7W1OsVfEpzJvZCrR4zZYlzLw_GpjpD2Q,741
|
|
399
|
-
dstack/_internal/server/services/gateways/__init__.py,sha256=
|
|
399
|
+
dstack/_internal/server/services/gateways/__init__.py,sha256=aDTpr45rkaQ2zBHnDQycwEDSQSno7bQ0buRPqTEDRxg,21536
|
|
400
400
|
dstack/_internal/server/services/gateways/client.py,sha256=XIJX3fGBbZ_AG8qZMTSE8KAB_ojq5YJFa0OXoD_dofg,7493
|
|
401
401
|
dstack/_internal/server/services/gateways/connection.py,sha256=ot3lV85XdmCT45vBWeyj57nLPcLPNm316zu3jMyeWjA,5625
|
|
402
402
|
dstack/_internal/server/services/gateways/pool.py,sha256=0LclTl1tyx-doS78LeaAKjr-SMp98zuwh5f9s06JSd0,1914
|
|
@@ -424,7 +424,7 @@ dstack/_internal/server/services/proxy/routers/service_proxy.py,sha256=5oB-SX8f_
|
|
|
424
424
|
dstack/_internal/server/services/proxy/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
425
425
|
dstack/_internal/server/services/proxy/services/service_proxy.py,sha256=4JrSxHqhBYqU1oENii89Db-bzkFWExYrOy-0mNEhWBs,4879
|
|
426
426
|
dstack/_internal/server/services/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
427
|
-
dstack/_internal/server/services/runner/client.py,sha256=
|
|
427
|
+
dstack/_internal/server/services/runner/client.py,sha256=8xcZNdnQPHtXCVS2RdVS2_KDcrCUa1K6cnqcDZsisBU,15653
|
|
428
428
|
dstack/_internal/server/services/runner/ssh.py,sha256=H-X0015ZPwYq5tc31ytFF1uNaUAr9itAsABI2oPJWrk,5017
|
|
429
429
|
dstack/_internal/server/services/services/__init__.py,sha256=HQz72SNN8W9gUQ5INyO_Wd8TR9j3V6qoHFGEDEI920w,10862
|
|
430
430
|
dstack/_internal/server/services/services/autoscalers.py,sha256=0o_w9La-ex_P3VKG88w_XN3hkLkzryv5l1cH3pkZyAE,4315
|
|
@@ -454,10 +454,10 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
|
|
|
454
454
|
dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
|
|
455
455
|
dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
|
|
456
456
|
dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
|
|
457
|
-
dstack/_internal/server/statics/index.html,sha256=
|
|
458
|
-
dstack/_internal/server/statics/main-5b9786c955b42bf93581.js,sha256=zhAnUUbO4YDnSGFJ77XNOIraIcw19ov7gokS2DLhy9E,6523313
|
|
459
|
-
dstack/_internal/server/statics/main-5b9786c955b42bf93581.js.map,sha256=6SX5ZigfpMVtB3xLBJb4IME1ifg1IwqsyMy8NKTSiq8,8561465
|
|
457
|
+
dstack/_internal/server/statics/index.html,sha256=0WVNSeT_erId8atQuddi8_KDU9CkPZ-sSgKKYKpT1RM,10468
|
|
460
458
|
dstack/_internal/server/statics/main-8f9c66f404e9c7e7e020.css,sha256=RC2sAxRMpIK3myvsxKEhLk4OsxTOt7DgWunCwyn-B34,1336694
|
|
459
|
+
dstack/_internal/server/statics/main-b0e80f8e26a168c129e9.js,sha256=3gD82dvSvrkE0XhV35ENT8jfDemHl5uh_PWkS9F6LzE,6527495
|
|
460
|
+
dstack/_internal/server/statics/main-b0e80f8e26a168c129e9.js.map,sha256=aajRK86uIUop4KlWzHkMCQ1eHR4-pMe86iw8hXxffaU,8567969
|
|
461
461
|
dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
|
|
462
462
|
dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
|
|
463
463
|
dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
|
|
@@ -535,21 +535,20 @@ dstack/_internal/server/statics/static/media/logo.f602feeb138844eda97c8cb6414614
|
|
|
535
535
|
dstack/_internal/server/statics/static/media/okta.12f178e6873a1100965f2a4dbd18fcec.svg,sha256=KqFI05gQM135zC1plF1WBRF2F7CyKL7km97WKsZjAHI,319
|
|
536
536
|
dstack/_internal/server/statics/static/media/theme.3994c817bb7dda191c1c9640dee0bf42.svg,sha256=ZxFFBVZWuRLqmWH4zhwGLNtKjOzHj-5MGJRunFAtu1I,561
|
|
537
537
|
dstack/_internal/server/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
538
|
-
dstack/_internal/server/testing/common.py,sha256=
|
|
538
|
+
dstack/_internal/server/testing/common.py,sha256=kFVgsk_dl3akkh5rZ8kSJcKT0-K44nxRENkj2cGPvXU,31569
|
|
539
539
|
dstack/_internal/server/testing/conf.py,sha256=-zhujfFjTHNfQDOK-hBck32By11c_kC0OeinB3esQGg,1902
|
|
540
540
|
dstack/_internal/server/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
541
541
|
dstack/_internal/server/utils/common.py,sha256=PbjXtqYy1taKXpyG5ys8cIrz9MXqc9dBAsR_9D1brrk,1414
|
|
542
542
|
dstack/_internal/server/utils/logging.py,sha256=bxUS2uWG5snypNRfL0d5sMLCDytyOZac81PSQlb7_rs,1907
|
|
543
543
|
dstack/_internal/server/utils/routers.py,sha256=ZuoQEpWjtv4WhXCJmd0ZvwBPZ8eKplO7Bb7leT9e8Ho,4630
|
|
544
544
|
dstack/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
545
|
-
dstack/_internal/utils/common.py,sha256=
|
|
545
|
+
dstack/_internal/utils/common.py,sha256=W91g_g63X50a5vPCYl7ntW528QBMViaN1owqKc9VHeo,9383
|
|
546
546
|
dstack/_internal/utils/crypto.py,sha256=2RTSyzePuwwqc1X2HO6lwcSFyZ2kujnqluoICQ2DLJQ,1462
|
|
547
547
|
dstack/_internal/utils/dxf.py,sha256=wguK9s6-69kqSDZkxd1kFEr6VlH5ixvFRJxizyOuJ8I,3229
|
|
548
548
|
dstack/_internal/utils/env.py,sha256=HRbIspHpKHh05fMZeV23-hrZoV6vVMuniefD08u6ey0,357
|
|
549
549
|
dstack/_internal/utils/event_loop.py,sha256=DO2ADtWfH2z8F2hBbg_EADSWzleQYGVZ9D1XYDpH-tk,880
|
|
550
550
|
dstack/_internal/utils/gpu.py,sha256=ZeWpy1nRLVh-FwBZdxbMoVjjCF0DWJlWfNoVgFhGx2w,1776
|
|
551
551
|
dstack/_internal/utils/hash.py,sha256=mCERRtj9QwbpoP3vveBqbniSJiNMHG0vPSzp4fxmKv0,920
|
|
552
|
-
dstack/_internal/utils/ignore.py,sha256=Lb5l_qTxOApHGPRu_YHkpTB9e5P0KIOFibMm8vTs_eQ,3138
|
|
553
552
|
dstack/_internal/utils/interpolator.py,sha256=kLRm_DagGcjnkLPtMC9NaHioegsUvg8uk4lom38eV3I,2922
|
|
554
553
|
dstack/_internal/utils/json_schema.py,sha256=oh23z6jdl_wx3qkojk_2egyKZbdmYWZs12Gd9Bk46M8,371
|
|
555
554
|
dstack/_internal/utils/logging.py,sha256=j37rgL-fQh2_E3ec_RqDy6Ora-Aa79ZVV-BAgZJViME,97
|
|
@@ -567,14 +566,14 @@ dstack/api/_public/runs.py,sha256=e_-CqkzHJqeUvO_yXbLnmO8ADZEcgRtagZoL5fr2wmU,28
|
|
|
567
566
|
dstack/api/huggingface/__init__.py,sha256=oIrEij3wttLZ1yrywEGvCMd6zswMQrX5pPjrqdSi0UA,2201
|
|
568
567
|
dstack/api/server/__init__.py,sha256=Zyl1M51tifn4pB150yIsh39N96qUgMjg5XplcElHDxg,6097
|
|
569
568
|
dstack/api/server/_backends.py,sha256=tSvJ4j-yp-S-4IYo7pKHluDaSsx6Xbwo08Ff6Do85fo,1639
|
|
570
|
-
dstack/api/server/_fleets.py,sha256=
|
|
569
|
+
dstack/api/server/_fleets.py,sha256=fc5NQpm1xrQ0L8IerqtnPdNb-F_7AiCfk1EDLR2CZkk,5322
|
|
571
570
|
dstack/api/server/_gateways.py,sha256=FAjSi1l6dj1H0mHuFwcCH-QbRxAxVzPI8xE2cmcvWqo,2688
|
|
572
571
|
dstack/api/server/_group.py,sha256=f9a_YvwZ7s1vDTQhOWHLwm3kO84C5R_zXToD4cxAnvY,432
|
|
573
572
|
dstack/api/server/_logs.py,sha256=ng8QvFAIaoVOVChTK6Wuu5BeM6y7gAdx30KEYRsn9xA,500
|
|
574
573
|
dstack/api/server/_metrics.py,sha256=OPb8sLhI_U605sHOPrELgy0_6cNFLJVfpvr-qkEukRM,670
|
|
575
574
|
dstack/api/server/_projects.py,sha256=g6kNSU6jer8u7Kaut1I0Ft4wRMLBBCQShJf3fOB63hQ,1440
|
|
576
575
|
dstack/api/server/_repos.py,sha256=bqsKuZWyiNLE8UAdSZrYNtk1J3Gu5MXXnTMIoM9jxpI,1770
|
|
577
|
-
dstack/api/server/_runs.py,sha256
|
|
576
|
+
dstack/api/server/_runs.py,sha256=-19KLwzv_Gql-Qp7w3gauf7yXHQLQPMI4_mlB_uDTwc,8417
|
|
578
577
|
dstack/api/server/_secrets.py,sha256=VqLfrIcmBJtPxNDRkXTG44H5SWoY788YJapScUukvdY,1576
|
|
579
578
|
dstack/api/server/_users.py,sha256=XzhgGKc5Tsr0-xkz3T6rGyWZ1tO7aYNhLux2eE7dAoY,1738
|
|
580
579
|
dstack/api/server/_volumes.py,sha256=xxOt8o5G-bhMh6wSvF4BDFNoqVEhlM4BXQr2KvX0pN0,1937
|
|
@@ -588,8 +587,8 @@ dstack/plugins/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
|
588
587
|
dstack/plugins/builtin/rest_plugin/__init__.py,sha256=lgTsq8Z6Km2F2UhPRChVB4vDM5ZpWtdk1iB1aa20ypA,440
|
|
589
588
|
dstack/plugins/builtin/rest_plugin/_models.py,sha256=9hgVuU6OGSxidar88XhQnNo9izYWeQvVH45ciErv-Es,1910
|
|
590
589
|
dstack/plugins/builtin/rest_plugin/_plugin.py,sha256=LbtjnXqd-51pR19Cr5rYxoIyDKjSOG4hIpXmv1Mpfnc,4615
|
|
591
|
-
dstack-0.19.
|
|
592
|
-
dstack-0.19.
|
|
593
|
-
dstack-0.19.
|
|
594
|
-
dstack-0.19.
|
|
595
|
-
dstack-0.19.
|
|
590
|
+
dstack-0.19.12.dist-info/METADATA,sha256=R0LNdikrlXFe0hhYPGnF1nTHOnRtyp0pe5Kmn18W_Bg,20513
|
|
591
|
+
dstack-0.19.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
592
|
+
dstack-0.19.12.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
|
|
593
|
+
dstack-0.19.12.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
|
|
594
|
+
dstack-0.19.12.dist-info/RECORD,,
|
dstack/_internal/utils/ignore.py
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import fnmatch
|
|
2
|
-
from itertools import zip_longest
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
from typing import Dict, List, Optional
|
|
5
|
-
|
|
6
|
-
from dstack._internal.utils.path import PathLike
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class GitIgnore:
|
|
10
|
-
def __init__(
|
|
11
|
-
self, root_dir: PathLike, ignore_files: List[str] = None, globs: List[str] = None
|
|
12
|
-
):
|
|
13
|
-
self.root_dir = Path(root_dir)
|
|
14
|
-
self.ignore_files = (
|
|
15
|
-
ignore_files
|
|
16
|
-
if ignore_files is not None
|
|
17
|
-
else [".gitignore", ".git/info/exclude", ".dstackignore"]
|
|
18
|
-
)
|
|
19
|
-
self.ignore_globs: Dict[str, List[str]] = {".": globs or []}
|
|
20
|
-
self.load_recursive()
|
|
21
|
-
|
|
22
|
-
def load_ignore_file(self, path: str, ignore_file: Path):
|
|
23
|
-
if path != "." and not path.startswith("./"):
|
|
24
|
-
path = "./" + path
|
|
25
|
-
if path not in self.ignore_globs:
|
|
26
|
-
self.ignore_globs[path] = []
|
|
27
|
-
with ignore_file.open("r") as f:
|
|
28
|
-
for line in f:
|
|
29
|
-
line = self.rstrip(line.rstrip("\n")).rstrip("/")
|
|
30
|
-
line = line.replace("\\ ", " ")
|
|
31
|
-
if line.startswith("#") or not line:
|
|
32
|
-
continue
|
|
33
|
-
self.ignore_globs[path].append(line)
|
|
34
|
-
|
|
35
|
-
def load_recursive(self, path: Optional[Path] = None):
|
|
36
|
-
path = path or self.root_dir
|
|
37
|
-
for ignore_file in self.ignore_files:
|
|
38
|
-
ignore_file = path / ignore_file
|
|
39
|
-
if ignore_file.exists():
|
|
40
|
-
self.load_ignore_file(str(path.relative_to(self.root_dir)), ignore_file)
|
|
41
|
-
|
|
42
|
-
for subdir in path.iterdir():
|
|
43
|
-
if not subdir.is_dir() or self.ignore(subdir.relative_to(self.root_dir)):
|
|
44
|
-
continue
|
|
45
|
-
self.load_recursive(subdir)
|
|
46
|
-
|
|
47
|
-
@staticmethod
|
|
48
|
-
def rstrip(value: str) -> str:
|
|
49
|
-
end = len(value) - 1
|
|
50
|
-
while end >= 0:
|
|
51
|
-
if not value[end].isspace():
|
|
52
|
-
break
|
|
53
|
-
if end > 0 and value[end - 1] == "\\":
|
|
54
|
-
break # escaped space
|
|
55
|
-
end -= 1
|
|
56
|
-
else:
|
|
57
|
-
return ""
|
|
58
|
-
return value[: end + 1]
|
|
59
|
-
|
|
60
|
-
@staticmethod
|
|
61
|
-
def fnmatch(name: str, pattern: str, sep="/") -> bool:
|
|
62
|
-
if pattern.startswith(sep):
|
|
63
|
-
name = sep + name
|
|
64
|
-
for n, p in zip_longest(
|
|
65
|
-
reversed(name.split(sep)), reversed(pattern.split(sep)), fillvalue=None
|
|
66
|
-
):
|
|
67
|
-
if p == "**":
|
|
68
|
-
raise NotImplementedError()
|
|
69
|
-
if p is None:
|
|
70
|
-
return True
|
|
71
|
-
if n is None or not fnmatch.fnmatch(n, p):
|
|
72
|
-
return False
|
|
73
|
-
return True
|
|
74
|
-
|
|
75
|
-
def ignore(self, path: PathLike, sep="/") -> bool:
|
|
76
|
-
if not path:
|
|
77
|
-
return False
|
|
78
|
-
path = Path(path)
|
|
79
|
-
if path.is_absolute():
|
|
80
|
-
path = path.relative_to(self.root_dir)
|
|
81
|
-
|
|
82
|
-
tokens = ("." + sep + str(path)).split(sep)
|
|
83
|
-
for i in range(1, len(tokens)):
|
|
84
|
-
parent = sep.join(tokens[:-i])
|
|
85
|
-
globs = self.ignore_globs.get(parent)
|
|
86
|
-
if not globs:
|
|
87
|
-
continue
|
|
88
|
-
name = sep.join(tokens[-i:])
|
|
89
|
-
for glob in globs:
|
|
90
|
-
if self.fnmatch(name, glob, sep=sep):
|
|
91
|
-
return True
|
|
92
|
-
return False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|