dstack 0.19.9__py3-none-any.whl → 0.19.11rc1__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/config.py +1 -1
- dstack/_internal/cli/commands/metrics.py +25 -10
- dstack/_internal/cli/commands/project.py +161 -0
- dstack/_internal/cli/commands/ps.py +9 -2
- dstack/_internal/cli/main.py +2 -0
- dstack/_internal/core/backends/azure/compute.py +8 -3
- dstack/_internal/core/backends/base/compute.py +2 -1
- dstack/_internal/core/models/configurations.py +21 -4
- dstack/_internal/core/models/runs.py +2 -1
- dstack/_internal/proxy/gateway/resources/nginx/00-log-format.conf +11 -1
- dstack/_internal/proxy/gateway/resources/nginx/service.jinja2 +12 -6
- dstack/_internal/proxy/gateway/services/stats.py +17 -3
- dstack/_internal/server/background/tasks/process_metrics.py +23 -21
- dstack/_internal/server/background/tasks/process_submitted_jobs.py +21 -12
- dstack/_internal/server/migrations/versions/bca2fdf130bf_add_runmodel_priority.py +34 -0
- dstack/_internal/server/models.py +1 -0
- dstack/_internal/server/routers/repos.py +8 -4
- dstack/_internal/server/services/instances.py +6 -2
- dstack/_internal/server/services/jobs/configurators/base.py +18 -4
- dstack/_internal/server/services/jobs/configurators/extensions/cursor.py +3 -1
- dstack/_internal/server/services/jobs/configurators/extensions/vscode.py +3 -1
- dstack/_internal/server/services/runs.py +31 -18
- dstack/_internal/server/settings.py +1 -0
- dstack/_internal/server/statics/index.html +1 -1
- dstack/_internal/server/statics/{main-b4f65323f5df007e1664.js → main-b4803049eac16aea9a49.js} +4 -4
- dstack/_internal/server/statics/{main-b4f65323f5df007e1664.js.map → main-b4803049eac16aea9a49.js.map} +1 -1
- dstack/_internal/server/testing/common.py +2 -0
- dstack/_internal/server/utils/routers.py +3 -6
- dstack/_internal/settings.py +4 -0
- dstack/api/_public/runs.py +6 -3
- dstack/api/server/_runs.py +2 -0
- dstack/version.py +2 -2
- {dstack-0.19.9.dist-info → dstack-0.19.11rc1.dist-info}/METADATA +11 -6
- {dstack-0.19.9.dist-info → dstack-0.19.11rc1.dist-info}/RECORD +37 -35
- {dstack-0.19.9.dist-info → dstack-0.19.11rc1.dist-info}/WHEEL +0 -0
- {dstack-0.19.9.dist-info → dstack-0.19.11rc1.dist-info}/entry_points.txt +0 -0
- {dstack-0.19.9.dist-info → dstack-0.19.11rc1.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""Add RunModel.priority
|
|
2
|
+
|
|
3
|
+
Revision ID: bca2fdf130bf
|
|
4
|
+
Revises: 20166748b60c
|
|
5
|
+
Create Date: 2025-05-14 15:24:21.269775
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "bca2fdf130bf"
|
|
14
|
+
down_revision = "20166748b60c"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade() -> None:
|
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
+
with op.batch_alter_table("runs", schema=None) as batch_op:
|
|
22
|
+
batch_op.add_column(sa.Column("priority", sa.Integer(), nullable=True))
|
|
23
|
+
batch_op.execute("UPDATE runs SET priority = 0")
|
|
24
|
+
with op.batch_alter_table("runs", schema=None) as batch_op:
|
|
25
|
+
batch_op.alter_column("priority", nullable=False)
|
|
26
|
+
# ### end Alembic commands ###
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def downgrade() -> None:
|
|
30
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
31
|
+
with op.batch_alter_table("runs", schema=None) as batch_op:
|
|
32
|
+
batch_op.drop_column("priority")
|
|
33
|
+
|
|
34
|
+
# ### end Alembic commands ###
|
|
@@ -348,6 +348,7 @@ class RunModel(BaseModel):
|
|
|
348
348
|
resubmission_attempt: Mapped[int] = mapped_column(Integer, default=0)
|
|
349
349
|
run_spec: Mapped[str] = mapped_column(Text)
|
|
350
350
|
service_spec: Mapped[Optional[str]] = mapped_column(Text)
|
|
351
|
+
priority: Mapped[int] = mapped_column(Integer, default=0)
|
|
351
352
|
|
|
352
353
|
jobs: Mapped[List["JobModel"]] = relationship(
|
|
353
354
|
back_populates="run", lazy="selectin", order_by="[JobModel.replica_num, JobModel.job_num]"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from typing import List, Tuple
|
|
2
2
|
|
|
3
3
|
from fastapi import APIRouter, Depends, Request, UploadFile
|
|
4
|
+
from humanize import naturalsize
|
|
4
5
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
5
6
|
|
|
6
7
|
from dstack._internal.core.errors import ResourceNotExistsError, ServerClientError
|
|
@@ -14,9 +15,10 @@ from dstack._internal.server.schemas.repos import (
|
|
|
14
15
|
)
|
|
15
16
|
from dstack._internal.server.security.permissions import ProjectMember
|
|
16
17
|
from dstack._internal.server.services import repos
|
|
18
|
+
from dstack._internal.server.settings import SERVER_CODE_UPLOAD_LIMIT
|
|
17
19
|
from dstack._internal.server.utils.routers import (
|
|
18
20
|
get_base_api_additional_responses,
|
|
19
|
-
|
|
21
|
+
get_request_size,
|
|
20
22
|
)
|
|
21
23
|
|
|
22
24
|
router = APIRouter(
|
|
@@ -94,10 +96,12 @@ async def upload_code(
|
|
|
94
96
|
session: AsyncSession = Depends(get_session),
|
|
95
97
|
user_project: Tuple[UserModel, ProjectModel] = Depends(ProjectMember()),
|
|
96
98
|
):
|
|
97
|
-
|
|
99
|
+
request_size = get_request_size(request)
|
|
100
|
+
if SERVER_CODE_UPLOAD_LIMIT > 0 and request_size > SERVER_CODE_UPLOAD_LIMIT:
|
|
98
101
|
raise ServerClientError(
|
|
99
|
-
"Repo diff size exceeds the limit of
|
|
100
|
-
"Use .gitignore to exclude large files from the repo."
|
|
102
|
+
f"Repo diff size is {naturalsize(request_size)}, which exceeds the limit of "
|
|
103
|
+
f"{naturalsize(SERVER_CODE_UPLOAD_LIMIT)}. Use .gitignore to exclude large files from the repo. This "
|
|
104
|
+
f"limit can be modified by setting the DSTACK_SERVER_CODE_UPLOAD_LIMIT_BYTES environment variable"
|
|
101
105
|
)
|
|
102
106
|
_, project = user_project
|
|
103
107
|
await repos.upload_code(
|
|
@@ -235,6 +235,7 @@ def get_shared_pool_instances_with_offers(
|
|
|
235
235
|
*,
|
|
236
236
|
idle_only: bool = False,
|
|
237
237
|
fleet_model: Optional[FleetModel] = None,
|
|
238
|
+
multinode: bool = False,
|
|
238
239
|
volumes: Optional[List[List[Volume]]] = None,
|
|
239
240
|
) -> list[tuple[InstanceModel, InstanceOfferWithAvailability]]:
|
|
240
241
|
instances_with_offers: list[tuple[InstanceModel, InstanceOfferWithAvailability]] = []
|
|
@@ -243,19 +244,22 @@ def get_shared_pool_instances_with_offers(
|
|
|
243
244
|
pool_instances=pool_instances,
|
|
244
245
|
profile=profile,
|
|
245
246
|
fleet_model=fleet_model,
|
|
246
|
-
multinode=
|
|
247
|
+
multinode=multinode,
|
|
247
248
|
volumes=volumes,
|
|
248
249
|
shared=True,
|
|
249
250
|
)
|
|
250
251
|
for instance in filtered_instances:
|
|
251
252
|
if idle_only and instance.status not in [InstanceStatus.IDLE, InstanceStatus.BUSY]:
|
|
252
253
|
continue
|
|
254
|
+
if multinode and instance.busy_blocks > 0:
|
|
255
|
+
continue
|
|
253
256
|
offer = get_instance_offer(instance)
|
|
254
257
|
if offer is None:
|
|
255
258
|
continue
|
|
256
259
|
total_blocks = common_utils.get_or_error(instance.total_blocks)
|
|
257
260
|
idle_blocks = total_blocks - instance.busy_blocks
|
|
258
|
-
|
|
261
|
+
min_blocks = total_blocks if multinode else 1
|
|
262
|
+
for blocks in range(min_blocks, total_blocks + 1):
|
|
259
263
|
shared_offer = generate_shared_offer(offer, blocks, total_blocks)
|
|
260
264
|
catalog_item = offer_to_catalog_item(shared_offer)
|
|
261
265
|
if gpuhunt.matches(catalog_item, query_filter):
|
|
@@ -6,10 +6,11 @@ from typing import Dict, List, Optional, Union
|
|
|
6
6
|
|
|
7
7
|
from cachetools import TTLCache, cached
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
from dstack._internal import settings
|
|
10
10
|
from dstack._internal.core.errors import DockerRegistryError, ServerClientError
|
|
11
11
|
from dstack._internal.core.models.common import RegistryAuth
|
|
12
12
|
from dstack._internal.core.models.configurations import (
|
|
13
|
+
DEFAULT_REPO_DIR,
|
|
13
14
|
PortMapping,
|
|
14
15
|
PythonVersion,
|
|
15
16
|
RunConfigurationType,
|
|
@@ -53,14 +54,14 @@ def get_default_image(python_version: str, nvcc: bool = False) -> str:
|
|
|
53
54
|
suffix = ""
|
|
54
55
|
if nvcc:
|
|
55
56
|
suffix = "-devel"
|
|
56
|
-
return f"
|
|
57
|
+
return f"{settings.DSTACK_BASE_IMAGE}:py{python_version}-{settings.DSTACK_BASE_IMAGE_VERSION}-cuda-12.1{suffix}"
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
class JobConfigurator(ABC):
|
|
60
61
|
TYPE: RunConfigurationType
|
|
61
62
|
|
|
62
63
|
_image_config: Optional[ImageConfig] = None
|
|
63
|
-
# JobSSHKey should be shared for all jobs in a replica for inter-node
|
|
64
|
+
# JobSSHKey should be shared for all jobs in a replica for inter-node communication.
|
|
64
65
|
_job_ssh_key: Optional[JobSSHKey] = None
|
|
65
66
|
|
|
66
67
|
def __init__(self, run_spec: RunSpec):
|
|
@@ -149,7 +150,8 @@ class JobConfigurator(ABC):
|
|
|
149
150
|
commands = self.run_spec.configuration.commands
|
|
150
151
|
elif shell_commands := self._shell_commands():
|
|
151
152
|
entrypoint = [self._shell(), "-i", "-c"]
|
|
152
|
-
|
|
153
|
+
dstack_image_commands = self._dstack_image_commands()
|
|
154
|
+
commands = [_join_shell_commands(dstack_image_commands + shell_commands)]
|
|
153
155
|
else: # custom docker image without commands
|
|
154
156
|
image_config = await self._get_image_config()
|
|
155
157
|
entrypoint = image_config.entrypoint or []
|
|
@@ -164,6 +166,18 @@ class JobConfigurator(ABC):
|
|
|
164
166
|
|
|
165
167
|
return result
|
|
166
168
|
|
|
169
|
+
def _dstack_image_commands(self) -> List[str]:
|
|
170
|
+
if (
|
|
171
|
+
self.run_spec.configuration.image is not None
|
|
172
|
+
or self.run_spec.configuration.entrypoint is not None
|
|
173
|
+
):
|
|
174
|
+
return []
|
|
175
|
+
return [
|
|
176
|
+
f"uv venv --prompt workflow --seed {DEFAULT_REPO_DIR}/.venv > /dev/null 2>&1",
|
|
177
|
+
f"echo 'source {DEFAULT_REPO_DIR}/.venv/bin/activate' >> ~/.bashrc",
|
|
178
|
+
f"source {DEFAULT_REPO_DIR}/.venv/bin/activate",
|
|
179
|
+
]
|
|
180
|
+
|
|
167
181
|
def _app_specs(self) -> List[AppSpec]:
|
|
168
182
|
specs = []
|
|
169
183
|
for i, pm in enumerate(filter_reserved_ports(self._ports())):
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from typing import List
|
|
2
2
|
|
|
3
|
+
from dstack._internal.core.models.configurations import DEFAULT_REPO_DIR
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
class CursorDesktop:
|
|
5
7
|
def __init__(
|
|
@@ -37,6 +39,6 @@ class CursorDesktop:
|
|
|
37
39
|
return [
|
|
38
40
|
"echo To open in Cursor, use link below:",
|
|
39
41
|
"echo ''",
|
|
40
|
-
f"echo ' cursor://vscode-remote/ssh-remote+{self.run_name}
|
|
42
|
+
f"echo ' cursor://vscode-remote/ssh-remote+{self.run_name}{DEFAULT_REPO_DIR}'", # TODO use $REPO_DIR
|
|
41
43
|
"echo ''",
|
|
42
44
|
]
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from typing import List
|
|
2
2
|
|
|
3
|
+
from dstack._internal.core.models.configurations import DEFAULT_REPO_DIR
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
class VSCodeDesktop:
|
|
5
7
|
def __init__(
|
|
@@ -37,6 +39,6 @@ class VSCodeDesktop:
|
|
|
37
39
|
return [
|
|
38
40
|
"echo To open in VS Code Desktop, use link below:",
|
|
39
41
|
"echo ''",
|
|
40
|
-
f"echo ' vscode://vscode-remote/ssh-remote+{self.run_name}
|
|
42
|
+
f"echo ' vscode://vscode-remote/ssh-remote+{self.run_name}{DEFAULT_REPO_DIR}'", # TODO use $REPO_DIR
|
|
41
43
|
"echo ''",
|
|
42
44
|
]
|
|
@@ -16,7 +16,7 @@ from dstack._internal.core.errors import (
|
|
|
16
16
|
ServerClientError,
|
|
17
17
|
)
|
|
18
18
|
from dstack._internal.core.models.common import ApplyAction
|
|
19
|
-
from dstack._internal.core.models.configurations import AnyRunConfiguration
|
|
19
|
+
from dstack._internal.core.models.configurations import RUN_PRIORITY_DEFAULT, AnyRunConfiguration
|
|
20
20
|
from dstack._internal.core.models.instances import (
|
|
21
21
|
InstanceAvailability,
|
|
22
22
|
InstanceOfferWithAvailability,
|
|
@@ -434,7 +434,12 @@ async def apply_plan(
|
|
|
434
434
|
# FIXME: potentially long write transaction
|
|
435
435
|
# Avoid getting run_model after update
|
|
436
436
|
await session.execute(
|
|
437
|
-
update(RunModel)
|
|
437
|
+
update(RunModel)
|
|
438
|
+
.where(RunModel.id == current_resource.id)
|
|
439
|
+
.values(
|
|
440
|
+
run_spec=run_spec.json(),
|
|
441
|
+
priority=run_spec.configuration.priority,
|
|
442
|
+
)
|
|
438
443
|
)
|
|
439
444
|
run = await get_run_by_name(
|
|
440
445
|
session=session,
|
|
@@ -495,6 +500,7 @@ async def submit_run(
|
|
|
495
500
|
status=RunStatus.SUBMITTED,
|
|
496
501
|
run_spec=run_spec.json(),
|
|
497
502
|
last_processed_at=submitted_at,
|
|
503
|
+
priority=run_spec.configuration.priority,
|
|
498
504
|
)
|
|
499
505
|
session.add(run_model)
|
|
500
506
|
|
|
@@ -721,15 +727,15 @@ async def _get_pool_offers(
|
|
|
721
727
|
pool_instances = [i for i in pool_instances if i.id not in detaching_instances_ids]
|
|
722
728
|
multinode = job.job_spec.jobs_per_replica > 1
|
|
723
729
|
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
730
|
+
shared_instances_with_offers = get_shared_pool_instances_with_offers(
|
|
731
|
+
pool_instances=pool_instances,
|
|
732
|
+
profile=run_spec.merged_profile,
|
|
733
|
+
requirements=job.job_spec.requirements,
|
|
734
|
+
volumes=volumes,
|
|
735
|
+
multinode=multinode,
|
|
736
|
+
)
|
|
737
|
+
for _, offer in shared_instances_with_offers:
|
|
738
|
+
pool_offers.append(offer)
|
|
733
739
|
|
|
734
740
|
nonshared_instances = filter_pool_instances(
|
|
735
741
|
pool_instances=pool_instances,
|
|
@@ -852,6 +858,13 @@ def _get_job_submission_cost(job_submission: JobSubmission) -> float:
|
|
|
852
858
|
|
|
853
859
|
|
|
854
860
|
def _validate_run_spec_and_set_defaults(run_spec: RunSpec):
|
|
861
|
+
# This function may set defaults for null run_spec values,
|
|
862
|
+
# although most defaults are resolved when building job_spec
|
|
863
|
+
# so that we can keep both the original user-supplied value (null in run_spec)
|
|
864
|
+
# and the default in job_spec.
|
|
865
|
+
# If a property is stored in job_spec - resolve the default there.
|
|
866
|
+
# Server defaults are preferable over client defaults so that
|
|
867
|
+
# the defaults depend on the server version, not the client version.
|
|
855
868
|
if run_spec.run_name is not None:
|
|
856
869
|
validate_dstack_resource_name(run_spec.run_name)
|
|
857
870
|
for mount_point in run_spec.configuration.volumes:
|
|
@@ -875,11 +888,14 @@ def _validate_run_spec_and_set_defaults(run_spec: RunSpec):
|
|
|
875
888
|
raise ServerClientError(
|
|
876
889
|
f"Maximum utilization_policy.time_window is {settings.SERVER_METRICS_RUNNING_TTL_SECONDS}s"
|
|
877
890
|
)
|
|
891
|
+
if run_spec.configuration.priority is None:
|
|
892
|
+
run_spec.configuration.priority = RUN_PRIORITY_DEFAULT
|
|
878
893
|
set_resources_defaults(run_spec.configuration.resources)
|
|
879
894
|
|
|
880
895
|
|
|
881
896
|
_UPDATABLE_SPEC_FIELDS = ["repo_code_hash", "configuration"]
|
|
882
|
-
|
|
897
|
+
_CONF_UPDATABLE_FIELDS = ["priority"]
|
|
898
|
+
_TYPE_SPECIFIC_CONF_UPDATABLE_FIELDS = {
|
|
883
899
|
"dev-environment": ["inactivity_duration"],
|
|
884
900
|
# Most service fields can be updated via replica redeployment.
|
|
885
901
|
# TODO: Allow updating other fields when rolling deployment is supported.
|
|
@@ -915,12 +931,9 @@ def _check_can_update_configuration(
|
|
|
915
931
|
raise ServerClientError(
|
|
916
932
|
f"Configuration type changed from {current.type} to {new.type}, cannot update"
|
|
917
933
|
)
|
|
918
|
-
updatable_fields =
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
f"Can only update {', '.join(_CONF_TYPE_TO_UPDATABLE_FIELDS)} configurations."
|
|
922
|
-
f" Not {new.type}"
|
|
923
|
-
)
|
|
934
|
+
updatable_fields = _CONF_UPDATABLE_FIELDS + _TYPE_SPECIFIC_CONF_UPDATABLE_FIELDS.get(
|
|
935
|
+
new.type, []
|
|
936
|
+
)
|
|
924
937
|
diff = diff_models(current, new)
|
|
925
938
|
changed_fields = list(diff.keys())
|
|
926
939
|
for key in changed_fields:
|
|
@@ -85,6 +85,7 @@ DEFAULT_SERVICE_CLIENT_MAX_BODY_SIZE = int(
|
|
|
85
85
|
USER_PROJECT_DEFAULT_QUOTA = int(os.getenv("DSTACK_USER_PROJECT_DEFAULT_QUOTA", 10))
|
|
86
86
|
FORBID_SERVICES_WITHOUT_GATEWAY = os.getenv("DSTACK_FORBID_SERVICES_WITHOUT_GATEWAY") is not None
|
|
87
87
|
|
|
88
|
+
SERVER_CODE_UPLOAD_LIMIT = int(os.getenv("DSTACK_SERVER_CODE_UPLOAD_LIMIT", 2 * 2**20))
|
|
88
89
|
|
|
89
90
|
# Development settings
|
|
90
91
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>dstack</title><meta name="description" content="Get GPUs at the best prices and availability from a wide range of providers. No cloud account of your own is required.
|
|
2
2
|
"/><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet"><meta name="og:title" content="dstack"><meta name="og:type" content="article"><meta name="og:image" content="/splash_thumbnail.png"><meta name="og:description" content="Get GPUs at the best prices and availability from a wide range of providers. No cloud account of your own is required.
|
|
3
|
-
"><link rel="icon" type="image/x-icon" href="/assets/favicon.ico"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="48x48" href="/assets/favicon-48x48.png"><link rel="manifest" href="/assets/manifest.webmanifest"><meta name="mobile-web-app-capable" content="yes"><meta name="theme-color" content="#fff"><meta name="application-name" content="dstackai"><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-title" content="dstackai"><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-640x1136.png"><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-1136x640.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-750x1334.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-1334x750.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1125x2436.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2436x1125.png"><link rel="apple-touch-startup-image" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1170x2532.png"><link rel="apple-touch-startup-image" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2532x1170.png"><link rel="apple-touch-startup-image" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1179x2556.png"><link rel="apple-touch-startup-image" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2556x1179.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-828x1792.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-1792x828.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1242x2688.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2688x1242.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1242x2208.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2208x1242.png"><link rel="apple-touch-startup-image" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1284x2778.png"><link rel="apple-touch-startup-image" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2778x1284.png"><link rel="apple-touch-startup-image" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1290x2796.png"><link rel="apple-touch-startup-image" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2796x1290.png"><link rel="apple-touch-startup-image" media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1488x2266.png"><link rel="apple-touch-startup-image" media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2266x1488.png"><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1536x2048.png"><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2048x1536.png"><link rel="apple-touch-startup-image" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1620x2160.png"><link rel="apple-touch-startup-image" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2160x1620.png"><link rel="apple-touch-startup-image" media="(device-width: 820px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1640x2160.png"><link rel="apple-touch-startup-image" media="(device-width: 820px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2160x1640.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1668x2388.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2388x1668.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1668x2224.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2224x1668.png"><link rel="apple-touch-startup-image" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-2048x2732.png"><link rel="apple-touch-startup-image" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2732x2048.png"><meta name="msapplication-TileColor" content="#fff"><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"><meta name="msapplication-config" content="/assets/browserconfig.xml"><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"><script defer="defer" src="/main-
|
|
3
|
+
"><link rel="icon" type="image/x-icon" href="/assets/favicon.ico"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="48x48" href="/assets/favicon-48x48.png"><link rel="manifest" href="/assets/manifest.webmanifest"><meta name="mobile-web-app-capable" content="yes"><meta name="theme-color" content="#fff"><meta name="application-name" content="dstackai"><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-title" content="dstackai"><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-640x1136.png"><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-1136x640.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-750x1334.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-1334x750.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1125x2436.png"><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2436x1125.png"><link rel="apple-touch-startup-image" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1170x2532.png"><link rel="apple-touch-startup-image" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2532x1170.png"><link rel="apple-touch-startup-image" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1179x2556.png"><link rel="apple-touch-startup-image" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2556x1179.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-828x1792.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-1792x828.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1242x2688.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2688x1242.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1242x2208.png"><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2208x1242.png"><link rel="apple-touch-startup-image" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1284x2778.png"><link rel="apple-touch-startup-image" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2778x1284.png"><link rel="apple-touch-startup-image" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1290x2796.png"><link rel="apple-touch-startup-image" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2796x1290.png"><link rel="apple-touch-startup-image" media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1488x2266.png"><link rel="apple-touch-startup-image" media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2266x1488.png"><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1536x2048.png"><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2048x1536.png"><link rel="apple-touch-startup-image" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1620x2160.png"><link rel="apple-touch-startup-image" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2160x1620.png"><link rel="apple-touch-startup-image" media="(device-width: 820px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1640x2160.png"><link rel="apple-touch-startup-image" media="(device-width: 820px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2160x1640.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1668x2388.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2388x1668.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-1668x2224.png"><link rel="apple-touch-startup-image" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2224x1668.png"><link rel="apple-touch-startup-image" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/assets/apple-touch-startup-image-2048x2732.png"><link rel="apple-touch-startup-image" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="/assets/apple-touch-startup-image-2732x2048.png"><meta name="msapplication-TileColor" content="#fff"><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"><meta name="msapplication-config" content="/assets/browserconfig.xml"><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"><script defer="defer" src="/main-b4803049eac16aea9a49.js"></script><link href="/main-8f9c66f404e9c7e7e020.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div class="b-page-header" id="header"></div><div id="root"></div></body></html>
|
dstack/_internal/server/statics/{main-b4f65323f5df007e1664.js → main-b4803049eac16aea9a49.js}
RENAMED
|
@@ -119408,7 +119408,7 @@ var src_getThemeMode=function(){var _window;return null!==(_window=window)&&void
|
|
|
119408
119408
|
;// ./src/App/types.ts
|
|
119409
119409
|
var src_ToolsTabs=/*#__PURE__*/function(ToolsTabs){return ToolsTabs.INFO="info",ToolsTabs.TUTORIAL="tutorial",ToolsTabs}({});
|
|
119410
119410
|
;// ./src/App/slice.ts
|
|
119411
|
-
function src_slice_ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function src_slice_objectSpread(e){for(var t,r=1;r<arguments.length;r++)t=null==arguments[r]?{}:arguments[r],r%2?src_slice_ownKeys(Object(t),!0).forEach(function(r){src_defineProperty_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):src_slice_ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))});return e}var src_slice_getInitialState=function(){var authData=null,storageData=null,activeMode=src_getThemeMode();try{storageData=localStorage.getItem(src_AUTH_DATA_STORAGE_KEY)}catch(e){console.log(e)}try{var modeStorageData=localStorage.getItem(src_MODE_STORAGE_KEY);modeStorageData&&
|
|
119411
|
+
function src_slice_ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function src_slice_objectSpread(e){for(var t,r=1;r<arguments.length;r++)t=null==arguments[r]?{}:arguments[r],r%2?src_slice_ownKeys(Object(t),!0).forEach(function(r){src_defineProperty_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):src_slice_ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))});return e}var src_slice_getInitialState=function(){var authData=null,storageData=null,activeMode=src_getThemeMode();try{storageData=localStorage.getItem(src_AUTH_DATA_STORAGE_KEY)}catch(e){console.log(e)}try{var modeStorageData=localStorage.getItem(src_MODE_STORAGE_KEY);modeStorageData&&(activeMode=modeStorageData)}catch(e){console.log(e)}return src_applyMode(activeMode),storageData&&(authData=JSON.parse(storageData)),{authData:authData,userData:null,breadcrumbs:null,systemMode:activeMode,toolsPanelState:{isOpen:!1,tab:src_ToolsTabs.TUTORIAL},helpPanel:{content:{}},tutorialPanel:{billingCompleted:!1,configureCLICompleted:!1,discordCompleted:!1,tallyCompleted:!1,quickStartCompleted:!1}}},src_initialState=src_slice_getInitialState();var src_appSlice=src_createSlice({name:"app",initialState:src_initialState,reducers:{setAuthData:function(state,action){state.authData=action.payload;try{localStorage.setItem(src_AUTH_DATA_STORAGE_KEY,JSON.stringify(action.payload))}catch(e){console.log(e)}},setSystemMode:function(state,action){state.systemMode=action.payload,src_applyMode(action.payload);try{localStorage.setItem(src_MODE_STORAGE_KEY,action.payload)}catch(e){console.log(e)}},removeAuthData:function(state){state.authData=null;try{localStorage.removeItem(src_AUTH_DATA_STORAGE_KEY)}catch(e){console.log(e)}},setUserData:function(state,action){state.userData=action.payload},setBreadcrumb:function(state,action){state.breadcrumbs=action.payload},openHelpPanel:function(state,action){state.toolsPanelState={isOpen:!0,tab:src_ToolsTabs.INFO},state.helpPanel={content:action.payload}},openTutorialPanel:function(state){state.toolsPanelState={isOpen:!0,tab:src_ToolsTabs.TUTORIAL}},closeToolsPanel:function(state){state.toolsPanelState=src_slice_objectSpread(src_slice_objectSpread({},state.toolsPanelState),{},{isOpen:!1})},setToolsTab:function(state,action){state.toolsPanelState=src_slice_objectSpread(src_slice_objectSpread({},state.toolsPanelState),{},{tab:action.payload})},updateTutorialPanelState:function(state,action){state.tutorialPanel=src_slice_objectSpread(src_slice_objectSpread({},state.tutorialPanel),action.payload)}}});var src_appSlice$actions=src_appSlice.actions,src_setAuthData=src_appSlice$actions.setAuthData,src_setSystemMode=src_appSlice$actions.setSystemMode,src_removeAuthData=src_appSlice$actions.removeAuthData,src_setUserData=src_appSlice$actions.setUserData,src_setBreadcrumb=src_appSlice$actions.setBreadcrumb,src_openHelpPanel=src_appSlice$actions.openHelpPanel,src_closeToolsPanel=src_appSlice$actions.closeToolsPanel,src_setToolsTab=src_appSlice$actions.setToolsTab,src_openTutorialPanel=src_appSlice$actions.openTutorialPanel,src_updateTutorialPanelState=src_appSlice$actions.updateTutorialPanelState;var src_selectUserData=function(state){return state.app.userData};var src_selectAuthToken=function(state){var _state$app$authData;return null===(_state$app$authData=state.app.authData)||void 0===_state$app$authData?void 0:_state$app$authData.token};var src_slice_selectUserName=function(state){var _state$app$userData;return null===(_state$app$userData=state.app.userData)||void 0===_state$app$userData?void 0:_state$app$userData.username};var src_selectBreadcrumbs=function(state){return state.app.breadcrumbs};var src_selectToolsPanelState=function(state){return state.app.toolsPanelState};var src_selectHelpPanelContent=function(state){return state.app.helpPanel.content};var src_selectTutorialPanel=function(state){return state.app.tutorialPanel};var src_selectSystemMode=function(state){return state.app.systemMode};/* harmony default export */ const src_App_slice = (src_appSlice.reducer);
|
|
119412
119412
|
;// ./src/hooks/useBreadcrumbs.ts
|
|
119413
119413
|
var src_useBreadcrumbs_useBreadcrumbs=function(breadcrumbs){var dispatch=src_hooks_useAppDispatch();(0,src_react.useEffect)(function(){return dispatch(src_setBreadcrumb(breadcrumbs)),function(){dispatch(src_setBreadcrumb(null))}},[breadcrumbs])};
|
|
119414
119414
|
;// ./src/components/Notifications/slice.ts
|
|
@@ -125032,7 +125032,7 @@ var src_serverApi=src_rtk_query_react_esm_createApi({reducerPath:"serverApi",bas
|
|
|
125032
125032
|
;// ./src/layouts/AppLayout/TutorialPanel/constants.tsx
|
|
125033
125033
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
125034
125034
|
// SPDX-License-Identifier: MIT-0
|
|
125035
|
-
var src_constants_tutorialPanelI18nStrings={labelsTaskStatus:{pending:"Pending","in-progress":"In progress",success:"Success"},loadingText:"Loading",tutorialListTitle:"Take a tour",tutorialListDescription:"Follow the tutorials below to get up to speed with dstack Sky.",tutorialListDownloadLinkText:"Download PDF version",tutorialCompletedText:"Completed",labelExitTutorial:"dismiss tutorial",learnMoreLinkText:"Learn more",startTutorialButtonText:"Start",restartTutorialButtonText:"Restart",completionScreenTitle:"Congratulations! You completed it.",feedbackLinkText:"Feedback",dismissTutorialButtonText:"Dismiss",taskTitle:function(taskIndex,_taskTitle){return"Task ".concat(taskIndex+1,": ").concat(_taskTitle)},stepTitle:function(stepIndex,_stepTitle){return"Step ".concat(stepIndex+1,": ").concat(_stepTitle)},labelTotalSteps:function(totalStepCount){return"Total steps: ".concat(totalStepCount)},labelLearnMoreExternalIcon:"Opens in a new tab",labelTutorialListDownloadLink:"Download PDF version of this tutorial",labelLearnMoreLink:"Learn more about transcribe audio (opens new tab)"};var src_overlayI18nStrings={stepCounterText:function(stepIndex,totalStepCount){return"Step ".concat(stepIndex+1,"/").concat(totalStepCount)},taskTitle:function(taskIndex,_taskTitle2){return"Task ".concat(taskIndex+1,": ").concat(_taskTitle2)},labelHotspot:function(openState,stepIndex,totalStepCount){return openState?"close annotation for step ".concat(stepIndex+1," of ").concat(totalStepCount):"open annotation for step ".concat(stepIndex+1," of ").concat(totalStepCount)},nextButtonText:"Next",previousButtonText:"Previous",finishButtonText:"Finish",labelDismissAnnotation:"hide annotation"};var src_constants_HotspotIds=/*#__PURE__*/function(HotspotIds){return HotspotIds.ADD_TOP_UP_BALANCE="billing-top-up-balance",HotspotIds.PAYMENT_CONTINUE_BUTTON="billing-payment-continue-button",HotspotIds.CONFIGURE_CLI_COMMAND="configure-cli-command",HotspotIds}({});var src_BILLING_TUTORIAL={completed:!1,title:"Set up billing",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Top up your balance via a credit card to use GPU by dstack Sky.")),completedScreenDescription:"TBA",tasks:[{title:"Add payment method",steps:[{title:"Click Top up balance button",content:"Click Top up balance button",hotspotId:src_constants_HotspotIds.ADD_TOP_UP_BALANCE},{title:"Click continue",content:"Please, click continue",hotspotId:src_constants_HotspotIds.PAYMENT_CONTINUE_BUTTON}]}]};var src_CONFIGURE_CLI_TUTORIAL={completed:!1,title:"Set up the CLI",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Configure the CLI on your local machine to submit workload to dstack Sky.")),completedScreenDescription:"TBA",tasks:[{title:"Configure the CLI",steps:[{title:"Run the dstack
|
|
125035
|
+
var src_constants_tutorialPanelI18nStrings={labelsTaskStatus:{pending:"Pending","in-progress":"In progress",success:"Success"},loadingText:"Loading",tutorialListTitle:"Take a tour",tutorialListDescription:"Follow the tutorials below to get up to speed with dstack Sky.",tutorialListDownloadLinkText:"Download PDF version",tutorialCompletedText:"Completed",labelExitTutorial:"dismiss tutorial",learnMoreLinkText:"Learn more",startTutorialButtonText:"Start",restartTutorialButtonText:"Restart",completionScreenTitle:"Congratulations! You completed it.",feedbackLinkText:"Feedback",dismissTutorialButtonText:"Dismiss",taskTitle:function(taskIndex,_taskTitle){return"Task ".concat(taskIndex+1,": ").concat(_taskTitle)},stepTitle:function(stepIndex,_stepTitle){return"Step ".concat(stepIndex+1,": ").concat(_stepTitle)},labelTotalSteps:function(totalStepCount){return"Total steps: ".concat(totalStepCount)},labelLearnMoreExternalIcon:"Opens in a new tab",labelTutorialListDownloadLink:"Download PDF version of this tutorial",labelLearnMoreLink:"Learn more about transcribe audio (opens new tab)"};var src_overlayI18nStrings={stepCounterText:function(stepIndex,totalStepCount){return"Step ".concat(stepIndex+1,"/").concat(totalStepCount)},taskTitle:function(taskIndex,_taskTitle2){return"Task ".concat(taskIndex+1,": ").concat(_taskTitle2)},labelHotspot:function(openState,stepIndex,totalStepCount){return openState?"close annotation for step ".concat(stepIndex+1," of ").concat(totalStepCount):"open annotation for step ".concat(stepIndex+1," of ").concat(totalStepCount)},nextButtonText:"Next",previousButtonText:"Previous",finishButtonText:"Finish",labelDismissAnnotation:"hide annotation"};var src_constants_HotspotIds=/*#__PURE__*/function(HotspotIds){return HotspotIds.ADD_TOP_UP_BALANCE="billing-top-up-balance",HotspotIds.PAYMENT_CONTINUE_BUTTON="billing-payment-continue-button",HotspotIds.CONFIGURE_CLI_COMMAND="configure-cli-command",HotspotIds}({});var src_BILLING_TUTORIAL={completed:!1,title:"Set up billing",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Top up your balance via a credit card to use GPU by dstack Sky.")),completedScreenDescription:"TBA",tasks:[{title:"Add payment method",steps:[{title:"Click Top up balance button",content:"Click Top up balance button",hotspotId:src_constants_HotspotIds.ADD_TOP_UP_BALANCE},{title:"Click continue",content:"Please, click continue",hotspotId:src_constants_HotspotIds.PAYMENT_CONTINUE_BUTTON}]}]};var src_CONFIGURE_CLI_TUTORIAL={completed:!1,title:"Set up the CLI",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Configure the CLI on your local machine to submit workload to dstack Sky.")),completedScreenDescription:"TBA",tasks:[{title:"Configure the CLI",steps:[{title:"Run the dstack project add command",content:"Run this command on your local machine to configure the dstack CLI.",hotspotId:src_constants_HotspotIds.CONFIGURE_CLI_COMMAND}]}]};var src_JOIN_DISCORD_TUTORIAL={completed:!1,title:"Community",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Need help or want to chat with other users of dstack? Join our Discord server!")),completedScreenDescription:"TBA",tasks:[]};var src_QUICKSTART_TUTORIAL={completed:!1,title:"Quickstart",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Check out the quickstart guide to get started with dstack")),completedScreenDescription:"TBA",tasks:[]};var src_CREDITS_TUTORIAL={completed:!1,title:"Get free credits",description:/*#__PURE__*/src_react.createElement(src_react.Fragment,null,/*#__PURE__*/src_react.createElement(src_box_Box,{variant:"p",color:"text-body-secondary",padding:{top:"n"}},"Tell us about your project and get some free credits to try dstack Sky!")),completedScreenDescription:"TBA",tasks:[]};
|
|
125036
125036
|
;// ./src/consts.ts
|
|
125037
125037
|
var src_consts_DATE_TIME_FORMAT="MM/dd/yyyy HH:mm";var src_DISCORD_URL="https://discord.gg/u8SmfwPpMd";var src_QUICK_START_URL="https://dstack.ai/docs/quickstart/";var src_TALLY_FORM_ID="3xYlYG";var src_DOCS_URL="https://dstack.ai/docs/";var src_DEFAULT_TABLE_PAGE_SIZE=20;
|
|
125038
125038
|
;// ./src/libs/run.ts
|
|
@@ -133973,7 +133973,7 @@ var src_SEARCHABLE_COLUMNS=["project_name","owner.username"];var src_ProjectList
|
|
|
133973
133973
|
;// ./src/pages/Project/Details/index.tsx
|
|
133974
133974
|
var src_ProjectDetails=function(){var _params$projectName,params=src_dist_useParams(),paramProjectName=null!==(_params$projectName=params.projectName)&&void 0!==_params$projectName?_params$projectName:"";return/*#__PURE__*/src_react.createElement(src_ContentLayout,{header:/*#__PURE__*/src_react.createElement(src_DetailsHeader,{title:paramProjectName})},/*#__PURE__*/src_react.createElement(src_Outlet,null))};
|
|
133975
133975
|
;// ./src/pages/Project/hooks/useConfigProjectCliComand.ts
|
|
133976
|
-
var src_useConfigProjectCliCommand=function(_ref){var projectName=_ref.projectName,currentUserToken=src_hooks_useAppSelector(src_selectAuthToken),cliCommand="dstack
|
|
133976
|
+
var src_useConfigProjectCliCommand=function(_ref){var projectName=_ref.projectName,currentUserToken=src_hooks_useAppSelector(src_selectAuthToken),cliCommand="dstack project add --name ".concat(projectName," --url ").concat(location.origin," --token ").concat(currentUserToken);return[cliCommand,function(){src_copyToClipboard(cliCommand)}]};
|
|
133977
133977
|
;// ./src/pages/Project/Members/UsersAutosuggest/index.tsx
|
|
133978
133978
|
var src_UsersAutosuggest_excluded=["optionsFilter","onSelect"];var src_UserAutosuggest=function(_ref){var optionsFilter=_ref.optionsFilter,onSelectProp=_ref.onSelect,props=src_objectWithoutProperties_objectWithoutProperties(_ref,src_UsersAutosuggest_excluded),_useTranslation=src_useTranslation_useTranslation(),t=_useTranslation.t,_useState=(0,src_react.useState)(""),_useState2=src_slicedToArray_slicedToArray(_useState,2),value=_useState2[0],setValue=_useState2[1],_useGetUserListQuery=src_useGetUserListQuery(),usersData=_useGetUserListQuery.data,isUsersLoading=_useGetUserListQuery.isLoading,options=(0,src_react.useMemo)(function(){return usersData?usersData.map(function(user){return{value:user.username}}):[]},[usersData]),filteredOptions=optionsFilter?optionsFilter(options):options;return/*#__PURE__*/src_react.createElement(src_autosuggest,src_extends_extends({value:value,enteredTextLabel:function(text){return"".concat(t("users_autosuggest.entered_text")," ").concat(text)},onChange:function(_ref2){var detail=_ref2.detail;return setValue(detail.value)},options:filteredOptions,statusType:isUsersLoading?"loading":void 0,loadingText:t("users_autosuggest.loading"),placeholder:t("users_autosuggest.placeholder"),empty:t("users_autosuggest.no_match"),onSelect:function(args){onSelectProp&&args.detail.value&&onSelectProp(args),setValue("")}},props))};
|
|
133979
133979
|
;// ./src/pages/Project/Members/styles.module.scss
|
|
@@ -136477,4 +136477,4 @@ var src_container=document.getElementById("root"),src_src_theme={tokens:{fontFam
|
|
|
136477
136477
|
|
|
136478
136478
|
/******/ })()
|
|
136479
136479
|
;
|
|
136480
|
-
//# sourceMappingURL=main-
|
|
136480
|
+
//# sourceMappingURL=main-b4803049eac16aea9a49.js.map
|