From a34679d9fb635e314e0d4da66305d67df4fbbbbd Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 01:20:39 +0100 Subject: [PATCH 01/21] [Docs] Refactoring, to bring `.md` to any page; plus, generate examples properly with correct repo edit URL; removed from a legacy llmstxt mkdocs plugin; added skill.md stub (content to be added) --- docs/blog/posts/0_20.md | 2 +- .../posts/digitalocean-and-amd-dev-cloud.md | 2 +- docs/blog/posts/dstack-sky.md | 2 +- docs/blog/posts/hotaisle.md | 2 +- docs/blog/posts/nebius.md | 2 +- docs/blog/posts/nvidia-and-amd-on-vultr.md | 2 +- docs/docs/concepts/dev-environments.md | 2 +- docs/docs/concepts/services.md | 2 +- docs/docs/concepts/tasks.md | 2 +- docs/docs/index.md | 4 +- .../index.md => installation.md} | 14 +- docs/docs/quickstart.md | 2 +- docs/llms.txt | 48 +++++++ docs/skill.md | 17 +++ mkdocs.yml | 48 +------ pyproject.toml | 1 - scripts/docs/hooks.py | 121 ++++++++++++++++++ 17 files changed, 212 insertions(+), 61 deletions(-) rename docs/docs/{installation/index.md => installation.md} (90%) create mode 100644 docs/llms.txt create mode 100644 docs/skill.md create mode 100644 scripts/docs/hooks.py diff --git a/docs/blog/posts/0_20.md b/docs/blog/posts/0_20.md index 02c088e3e6..550cb60ad4 100644 --- a/docs/blog/posts/0_20.md +++ b/docs/blog/posts/0_20.md @@ -121,7 +121,7 @@ While the update introduces breaking changes, 0.19.* CLIs remain compatible with ## What's next -1. Follow the [Installation](../../docs/installation/index.md) guide +1. Follow the [Installation](../../docs/installation.md) guide 2. Try the [Quickstart](../../docs/quickstart.md) 3. Report issues on [GitHub](https://github.com/dstackai/dstack/issues) 4. Ask questions on [Discord](https://discord.gg/u8SmfwPpMd) diff --git a/docs/blog/posts/digitalocean-and-amd-dev-cloud.md b/docs/blog/posts/digitalocean-and-amd-dev-cloud.md index ce400899d6..7893356f4c 100644 --- a/docs/blog/posts/digitalocean-and-amd-dev-cloud.md +++ b/docs/blog/posts/digitalocean-and-amd-dev-cloud.md @@ -71,7 +71,7 @@ $ dstack server -For more details, see [Installation](../../docs/installation/index.md). +For more details, see [Installation](../../docs/installation.md). Use the `dstack` CLI to manage [dev environments](../../docs/concepts/dev-environments.md), [tasks](../../docs/concepts/tasks.md), diff --git a/docs/blog/posts/dstack-sky.md b/docs/blog/posts/dstack-sky.md index 78d35641c0..6919372024 100644 --- a/docs/blog/posts/dstack-sky.md +++ b/docs/blog/posts/dstack-sky.md @@ -69,7 +69,7 @@ Continue? [y/n]: !!! info "Backends" - `dstack Sky` supports the same [backends](../../docs/installation/index.md) as the open-source version, except that you + `dstack Sky` supports the same [backends](../../docs/installation.md) as the open-source version, except that you don't need to set them up. By default, it uses all supported backends. You can use both on-demand and spot instances without needing to manage quotas, as they are automatically handled diff --git a/docs/blog/posts/hotaisle.md b/docs/blog/posts/hotaisle.md index 928d0cf9c6..0d531710d5 100644 --- a/docs/blog/posts/hotaisle.md +++ b/docs/blog/posts/hotaisle.md @@ -80,7 +80,7 @@ $ dstack server -For more details, see [Installation](../../docs/installation/index.md). +For more details, see [Installation](../../docs/installation.md). Use the `dstack` CLI to manage [dev environments](../../docs/concepts/dev-environments.md), [tasks](../../docs/concepts/tasks.md), diff --git a/docs/blog/posts/nebius.md b/docs/blog/posts/nebius.md index c7a280971a..5fab310227 100644 --- a/docs/blog/posts/nebius.md +++ b/docs/blog/posts/nebius.md @@ -77,7 +77,7 @@ $ dstack server -For more details, refer to [Installation](../../docs/installation/index.md). +For more details, refer to [Installation](../../docs/installation.md). Use the `dstack` CLI to manage [dev environments](../../docs/concepts/dev-environments.md), [tasks](../../docs/concepts/tasks.md), diff --git a/docs/blog/posts/nvidia-and-amd-on-vultr.md b/docs/blog/posts/nvidia-and-amd-on-vultr.md index ed75607d47..512d316f8b 100644 --- a/docs/blog/posts/nvidia-and-amd-on-vultr.md +++ b/docs/blog/posts/nvidia-and-amd-on-vultr.md @@ -65,7 +65,7 @@ projects: -For more details, refer to [Installation](../../docs/installation/index.md). +For more details, refer to [Installation](../../docs/installation.md). > Interested in fine-tuning or deploying DeepSeek on Vultr? Check out the corresponding [example](../../examples/llms/deepseek/index.md). diff --git a/docs/docs/concepts/dev-environments.md b/docs/docs/concepts/dev-environments.md index bda3406a61..a159ff808a 100644 --- a/docs/docs/concepts/dev-environments.md +++ b/docs/docs/concepts/dev-environments.md @@ -3,7 +3,7 @@ A dev environment lets you provision an instance and access it with your desktop IDE. ??? info "Prerequisites" - Before running a dev environment, make sure you’ve [installed](../installation/index.md) the server and CLI, and created a [fleet](fleets.md). + Before running a dev environment, make sure you’ve [installed](../installation.md) the server and CLI, and created a [fleet](fleets.md). ## Apply a configuration diff --git a/docs/docs/concepts/services.md b/docs/docs/concepts/services.md index 0f6bf07bb8..d75b752c47 100644 --- a/docs/docs/concepts/services.md +++ b/docs/docs/concepts/services.md @@ -3,7 +3,7 @@ Services allow you to deploy models or web apps as secure and scalable endpoints. ??? info "Prerequisites" - Before running a service, make sure you’ve [installed](../installation/index.md) the server and CLI, and created a [fleet](fleets.md). + Before running a service, make sure you’ve [installed](../installation.md) the server and CLI, and created a [fleet](fleets.md). ## Apply a configuration diff --git a/docs/docs/concepts/tasks.md b/docs/docs/concepts/tasks.md index 6f3f2fabb7..f0a0321466 100644 --- a/docs/docs/concepts/tasks.md +++ b/docs/docs/concepts/tasks.md @@ -3,7 +3,7 @@ A task allows you to run arbitrary commands on one or more nodes. They are best suited for jobs like training or batch processing. ??? info "Prerequisites" - Before running a task, make sure you’ve [installed](../installation/index.md) the server and CLI, and created a [fleet](fleets.md). + Before running a task, make sure you’ve [installed](../installation.md) the server and CLI, and created a [fleet](fleets.md). ## Apply a configuration diff --git a/docs/docs/index.md b/docs/docs/index.md index 121a379150..c48338c563 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -13,7 +13,7 @@ It streamlines development, training, and inference, and is compatible with any #### 1. Set up the server -> Before using `dstack`, ensure you've [installed](installation/index.md) the server, or signed up for [dstack Sky](https://sky.dstack.ai). +> Before using `dstack`, ensure you've [installed](installation.md) the server, or signed up for [dstack Sky](https://sky.dstack.ai). #### 2. Define configurations @@ -35,7 +35,7 @@ Apply the configuration either via the `dstack apply` CLI command (or through a port-forwarding, ingress, and more. !!! info "Where do I start?" - 1. Proceed to [installation](installation/index.md) + 1. Proceed to [installation](installation.md) 2. See [quickstart](quickstart.md) 3. Browse [examples](/examples) 4. Join [Discord](https://discord.gg/u8SmfwPpMd) diff --git a/docs/docs/installation/index.md b/docs/docs/installation.md similarity index 90% rename from docs/docs/installation/index.md rename to docs/docs/installation.md index e179a8e663..588f72ac15 100644 --- a/docs/docs/installation/index.md +++ b/docs/docs/installation.md @@ -63,11 +63,11 @@ The server can run on your laptop or any environment with access to the cloud an -For more details on server deployment options, see the [Server deployment](../guides/server-deployment.md) guide. +For more details on server deployment options, see the [Server deployment](guides/server-deployment.md) guide. ### Configure backends -> To orchestrate compute across GPU clouds or Kubernetes clusters, you need to configure [backends](../concepts/backends.md). +> To orchestrate compute across GPU clouds or Kubernetes clusters, you need to configure [backends](concepts/backends.md). ## Set up the CLI @@ -126,7 +126,7 @@ This configuration is stored in `~/.dstack/config.yml`. ### Check offers -To verify that both the server and CLI are properly configured, use the [`dstack offer`](../reference/cli/dstack/offer.md#list-gpu-offers) command to list available GPU offers. If you don't see valid offers, ensure you've set up [backends](../concepts/backends.md). +To verify that both the server and CLI are properly configured, use the [`dstack offer`](reference/cli/dstack/offer.md#list-gpu-offers) command to list available GPU offers. If you don't see valid offers, ensure you've set up [backends](concepts/backends.md). ??? info "Shell autocompletion" @@ -195,8 +195,8 @@ To verify that both the server and CLI are properly configured, use the [`dstack > `autoload -Uz compinit && compinit`. !!! info "What's next?" - 1. See [Backends](../concepts/backends.md) - 2. Follow [Quickstart](../quickstart.md) - 3. Check the [server deployment](../guides/server-deployment.md) guide - 4. Browse [examples](../../examples.md) + 1. See [Backends](concepts/backends.md) + 2. Follow [Quickstart](quickstart.md) + 3. Check the [server deployment](guides/server-deployment.md) guide + 4. Browse [examples](../examples.md) 5. Join the community via [Discord](https://discord.gg/u8SmfwPpMd) diff --git a/docs/docs/quickstart.md b/docs/docs/quickstart.md index 2a8d3f0610..b895d28e40 100644 --- a/docs/docs/quickstart.md +++ b/docs/docs/quickstart.md @@ -1,7 +1,7 @@ # Quickstart !!! info "Prerequsites" - Before using `dstack`, ensure you've [installed](installation/index.md) the server and the CLI. + Before using `dstack`, ensure you've [installed](installation.md) the server and the CLI. ## Create a fleet diff --git a/docs/llms.txt b/docs/llms.txt new file mode 100644 index 0000000000..38fbac152e --- /dev/null +++ b/docs/llms.txt @@ -0,0 +1,48 @@ +# dstack + +> dstack is an open-source control plane for GPU provisioning and orchestration across GPU clouds, Kubernetes, and on-prem clusters. + +## Getting started + +- [Overview](https://dstack.ai/docs/index.md): What dstack is +- [Installation](https://dstack.ai/docs/index.md): How to set up the dstack server and the dstack CLI +- [Quickstart](https://dstack.ai/docs/quickstart.md): How to get started and submit your first run + +## Concepts + +- [Backends](https://dstack.ai/docs/concepts/backends.md): How to configure backends - to connect dstack to cloud providers, Kubernetes clusters, etc +- [Fleets](https://dstack.ai/docs/concepts/fleets.md): How to create and manage fleets - required before submitting runs +- [Dev environments](https://dstack.ai/docs/concepts/dev-environments.md): How to create dev environments - for interactive development using a desktop IDE +- [Tasks](https://dstack.ai/docs/concepts/tasks.md): How to run tasks - for training or fine-tuning, including distributed tasks +- [Services](https://dstack.ai/docs/concepts/services.md): How to deploy services - for model inference or web apps +- [Volumes](https://dstack.ai/docs/concepts/volumes.md): How to manage volumes - for persistent storage or caching +- [Gateways](https://dstack.ai/docs/concepts/gateways.md): How to manage gateways - enabling auto-scaling, rate limits, and custom domains +- [Secrets](https://dstack.ai/docs/concepts/secrets.md): How to manage secrets - for API keys or other sensitive data +- [Projects](https://dstack.ai/docs/concepts/projects.md): How to manage projects - for managing separate teams +- [Metrics](https://dstack.ai/docs/concepts/metrics.md): How to access metrics - for monitoring of runs/jobs/fleets, hardware usage (e.g. GPU util), etc +- [Events](https://dstack.ai/docs/concepts/events.md): How to access events - aka audit log - for tracking state changes, resource creation/deletion, etc + +## Guides + +- [Server deployment](https://dstack.ai/docs/guides/server-deployment.md): Detailed guide on how to deploy the dstack server +- [Troubleshooting](https://dstack.ai/docs/guides/troubleshooting.md): Common issues and how to troubleshoot them +- [Protips](https://dstack.ai/docs/guides/protips.md): Pro tips - tips and tricks to use dstack more efficiently + +## Examples + +- [TRL](https://dstack.ai/examples/single-node-training/trl.md): TRL +- [Axolotl](https://dstack.ai/examples/single-node-training/axolotl.md): Axolotl +- [TRL](https://dstack.ai/examples/distributed-training/trl.md): TRL +- [Axolotl](https://dstack.ai/examples/distributed-training/axolotl.md): Axolotl +- [Ray+RAGEN](https://dstack.ai/examples/distributed-training/ray-ragen.md): Ray+RAGEN +- [NCCL/RCCL tests](https://dstack.ai/examples/clusters/nccl-rccl-tests.md): NCCL/RCCL tests +- [SGLang](https://dstack.ai/examples/inference/sglang.md): SGLang +- [vLLM](https://dstack.ai/examples/inference/vllm.md): vLLM +- [NIM](https://dstack.ai/examples/inference/nim.md): NIM +- [TensorRT-LLM](https://dstack.ai/examples/inference/trtllm.md): TensorRT-LLM + +## Accelerators + +- [AMD](https://dstack.ai/examples/accelerators/amd.md): AMD +- [TPU](https://dstack.ai/examples/accelerators/tpu.md): TPU +- [Tenstorrent](https://dstack.ai/examples/accelerators/tenstorrent.md): Tenstorrent diff --git a/docs/skill.md b/docs/skill.md new file mode 100644 index 0000000000..b31dcb0811 --- /dev/null +++ b/docs/skill.md @@ -0,0 +1,17 @@ +--- +name: dstack +description: >- + dstack is an open-source control plane for GPU provisioning and orchestration across GPU clouds, Kubernetes, and on-prem clusters. +--- + +# dstack + + diff --git a/mkdocs.yml b/mkdocs.yml index c7afe30256..b8638e0a6c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,6 +13,9 @@ edit_uri: edit/master/docs/ #Copyright copyright: © 2025 dstack +hooks: + - scripts/docs/hooks.py + # Configuration theme: name: material @@ -60,44 +63,6 @@ theme: # Plugins plugins: - - llmstxt-md: - enable_copy_button: false - sections: - Getting started: - - docs/index.md: What dstack is - - docs/installation/index.md: How to set up the dstack server and the dstack CLI - - docs/quickstart.md: How to get started and submit your first run - Concepts: - - docs/concepts/backends.md: How to configure backends - to connect dstack to cloud providers, Kubernetes clusters, etc - - docs/concepts/fleets.md: How to create and manage fleets - required before submitting runs - - docs/concepts/dev-environments.md: How to create dev environments - for interactive development using a desktop IDE - - docs/concepts/tasks.md: How to run tasks - for training or fine-tuning, including distributed tasks - - docs/concepts/services.md: How to deploy services - for model inference or web apps - - docs/concepts/volumes.md: How to manage volumes - for persistent storage or caching - - docs/concepts/gateways.md: How to manage gateways - enabling auto-scaling, rate limits, and custom domains - - docs/concepts/secrets.md: How to manage secrets - for API keys or other sensitive data - - docs/concepts/projects.md: How to manage projects - for managing separate teams - - docs/concepts/metrics.md: How to access metrics - for monitoring of runs/jobs/fleets, hardware usage (e.g. GPU util), etc - - docs/concepts/events.md: How to access events - aka audit log - for tracking state changes, resource creation/deletion, etc - Guides: - - docs/guides/server-deployment.md: Detailed guide on how to deploy the dstack server - - docs/guides/troubleshooting.md: Common issues and how to troubleshoot them - - docs/guides/protips.md: Pro tips - tips and tricks to use dstack more efficiently - Examples: - - examples/single-node-training/trl/index.md: TRL - - examples/single-node-training/axolotl/index.md: Axolotl - - examples/distributed-training/trl/index.md: TRL - - examples/distributed-training/axolotl/index.md: Axolotl - - examples/distributed-training/ray-ragen/index.md: Ray+RAGEN - - examples/clusters/nccl-rccl-tests/index.md: NCCL/RCCL tests - - examples/inference/sglang/index.md: SGLang - - examples/inference/vllm/index.md: vLLM - - examples/inference/nim/index.md: NIM - - examples/inference/trtllm/index.md: TensorRT-LLM - Accelerators: - - examples/accelerators/amd/index.md: AMD - - examples/accelerators/tpu/index.md: TPU - - examples/accelerators/tenstorrent/index.md: Tenstorrent - blog: blog_dir: blog post_url_format: "{slug}" @@ -172,8 +137,8 @@ plugins: "docs/guides/migration.md": "docs/guides/upgrade.md" - typeset - gen-files: + # TODO: convert these to hooks scripts: # always relative to mkdocs.yml - - scripts/docs/gen_examples.py - scripts/docs/gen_cli_reference.py - scripts/docs/gen_openapi_reference.py - scripts/docs/gen_schema_reference.py @@ -258,7 +223,7 @@ nav: - Docs: - Getting started: - Overview: docs/index.md - - Installation: docs/installation/index.md + - Installation: docs/installation.md - Quickstart: docs/quickstart.md - Concepts: - Backends: docs/concepts/backends.md @@ -315,7 +280,8 @@ nav: - Plugins: - Python API: docs/reference/plugins/python/index.md - REST API: docs/reference/plugins/rest/index.md - - llms-full.txt: https://dstack.ai/llms-full.txt + - llms.txt: https://dstack.ai/llms.txt + - skill.md: https://dstack.ai/skill.md - Examples: - examples.md - Single-node training: diff --git a/pyproject.toml b/pyproject.toml index 748b5211a1..d9becf693e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -161,7 +161,6 @@ dev = [ "mkdocs-gen-files; python_version >= '3.11'", "mkdocstrings[python]; python_version >= '3.11'", "mkdocs-render-swagger-plugin; python_version >= '3.11'", - "mkdocs-llmstxt-md; python_version >= '3.11'" ] [project.optional-dependencies] diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py new file mode 100644 index 0000000000..c1722f5b55 --- /dev/null +++ b/scripts/docs/hooks.py @@ -0,0 +1,121 @@ +import json +import logging +import mimetypes +import os +import shutil + +import yaml + +mimetypes.add_type("text/plain", ".md") + +log = logging.getLogger("mkdocs") + +WELL_KNOWN_SKILLS_DIR = ".well-known/skills" +SKILL_SOURCE = "skill.md" +DISABLE_EXAMPLES_ENV = "DSTACK_DOCS_DISABLE_EXAMPLES" + + +def _get_materialized_content(rel_path, config): + """Return README content for examples/**/index.md stubs, else None.""" + if os.environ.get(DISABLE_EXAMPLES_ENV): + return None + + if rel_path.startswith("examples/") and rel_path.endswith("index.md"): + repo_root = os.path.dirname(config["config_file_path"]) + example_dir = os.path.dirname(rel_path) + readme_path = os.path.join(repo_root, example_dir, "README.md") + + if os.path.isfile(readme_path): + with open(readme_path, "r", encoding="utf-8") as f: + return f.read() + return None + + +def on_page_read_source(page, config): + """Use README content for example stubs when rendering HTML.""" + return _get_materialized_content(page.file.src_uri, config) + + +def on_page_context(context, page, config, nav): + """Override edit_url only for example stubs so Edit points to the README; other pages use theme default from edit_uri.""" + repo_url = (config.get("repo_url") or "").rstrip("/") + edit_uri = (config.get("edit_uri") or "edit/master/docs/").strip("/") + if not repo_url: + return context + # edit_uri is e.g. "edit/master/docs" -> branch is second segment + edit_parts = edit_uri.split("/") + branch = edit_parts[1] if len(edit_parts) >= 2 else "master" + + rel_path = page.file.src_uri + if rel_path.startswith("examples/") and rel_path.endswith("index.md"): + example_dir = os.path.dirname(rel_path) + page.edit_url = f"{repo_url}/edit/{branch}/{example_dir}/README.md" + + return context + + +def on_post_build(config): + """Copy .md files to site (raw) and write .well-known/skills index.""" + site_dir = config["site_dir"] + docs_dir = config["docs_dir"] + + for root, _, files in os.walk(docs_dir): + for file in files: + if not file.endswith(".md"): + continue + + src_path = os.path.join(root, file) + rel_path = os.path.relpath(src_path, docs_dir).replace(os.sep, "/") + content = _get_materialized_content(rel_path, config) + + if content: + clean_name = os.path.dirname(rel_path) + ".md" + dest_path = os.path.join(site_dir, clean_name) + os.makedirs(os.path.dirname(dest_path), exist_ok=True) + with open(dest_path, "w", encoding="utf-8") as f: + f.write(content) + else: + dest_path = os.path.join(site_dir, rel_path) + os.makedirs(os.path.dirname(dest_path), exist_ok=True) + shutil.copy2(src_path, dest_path) + + _write_well_known_skills(docs_dir, site_dir) + + +def _write_well_known_skills(docs_dir, site_dir): + """Parse skill.md and write .well-known/skills/index.json. name and description come from frontmatter only.""" + skill_src = os.path.join(docs_dir, SKILL_SOURCE) + if not os.path.isfile(skill_src): + return + + name = None + description = None + try: + with open(skill_src, "r", encoding="utf-8") as f: + text = f.read() + if text.startswith("---"): + parts = text.split("---", 2) + if len(parts) >= 3: + data = yaml.safe_load(parts[1]) + if isinstance(data, dict): + name = data.get("name") + description = data.get("description") + except Exception as e: + log.error(f"Skill parsing error: {e}") + + if not name or not description: + log.warning( + "skill.md missing name or description in frontmatter; skipping .well-known/skills" + ) + return + + out_dir = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, name) + os.makedirs(out_dir, exist_ok=True) + shutil.copy2(skill_src, os.path.join(out_dir, "skill.md")) + + index_path = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, "index.json") + index = {"skills": [{"name": name, "description": description[:1024], "files": ["skill.md"]}]} + with open(index_path, "w", encoding="utf-8") as f: + json.dump(index, f, indent=2) + + log.info(f"Published skill: {name}") From b89dfa0c15eef61e0b055fff2111c9c5ae8ae6f6 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 01:36:34 +0100 Subject: [PATCH 02/21] [Docs] Move SKILL.md to skills/dstack --- scripts/docs/hooks.py | 15 +++++++++------ docs/skill.md => skills/dstack/SKILL.md | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) rename docs/skill.md => skills/dstack/SKILL.md (95%) diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index c1722f5b55..99ba5ac50c 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -11,7 +11,7 @@ log = logging.getLogger("mkdocs") WELL_KNOWN_SKILLS_DIR = ".well-known/skills" -SKILL_SOURCE = "skill.md" +SKILL_PATH = ("skills", "dstack", "SKILL.md") DISABLE_EXAMPLES_ENV = "DSTACK_DOCS_DISABLE_EXAMPLES" @@ -79,12 +79,13 @@ def on_post_build(config): os.makedirs(os.path.dirname(dest_path), exist_ok=True) shutil.copy2(src_path, dest_path) - _write_well_known_skills(docs_dir, site_dir) + _write_well_known_skills(config, site_dir) -def _write_well_known_skills(docs_dir, site_dir): - """Parse skill.md and write .well-known/skills/index.json. name and description come from frontmatter only.""" - skill_src = os.path.join(docs_dir, SKILL_SOURCE) +def _write_well_known_skills(config, site_dir): + """Parse skills/dstack/SKILL.md and write .well-known/skills/index.json. name and description come from frontmatter only.""" + repo_root = os.path.dirname(config["config_file_path"]) + skill_src = os.path.join(repo_root, *SKILL_PATH) if not os.path.isfile(skill_src): return @@ -105,13 +106,15 @@ def _write_well_known_skills(docs_dir, site_dir): if not name or not description: log.warning( - "skill.md missing name or description in frontmatter; skipping .well-known/skills" + "skills/dstack/SKILL.md missing name or description in frontmatter; skipping .well-known/skills" ) return out_dir = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, name) os.makedirs(out_dir, exist_ok=True) shutil.copy2(skill_src, os.path.join(out_dir, "skill.md")) + # Serve skill at site root (e.g. https://dstack.ai/skill.md) from skills/dstack/SKILL.md + shutil.copy2(skill_src, os.path.join(site_dir, "skill.md")) index_path = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, "index.json") index = {"skills": [{"name": name, "description": description[:1024], "files": ["skill.md"]}]} diff --git a/docs/skill.md b/skills/dstack/SKILL.md similarity index 95% rename from docs/skill.md rename to skills/dstack/SKILL.md index b31dcb0811..bff0f9b7ac 100644 --- a/docs/skill.md +++ b/skills/dstack/SKILL.md @@ -1,6 +1,6 @@ --- name: dstack -description: >- +description: | dstack is an open-source control plane for GPU provisioning and orchestration across GPU clouds, Kubernetes, and on-prem clusters. --- From 62582876fa115dfc42a3b4b540bcbbaaccabbb8a Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 14:35:37 +0100 Subject: [PATCH 03/21] [Docs] Added the initial version of SKILL.md --- skills/dstack/SKILL.md | 421 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 414 insertions(+), 7 deletions(-) diff --git a/skills/dstack/SKILL.md b/skills/dstack/SKILL.md index bff0f9b7ac..67b4d4f0c4 100644 --- a/skills/dstack/SKILL.md +++ b/skills/dstack/SKILL.md @@ -6,12 +6,419 @@ description: | # dstack - +**When to use this skill:** +- Running GPU workloads (development, training, batch jobs, inference) across GPU clouds or on-prem GPU clusters +- Managing fleets of GPU instances (cloud or on-prem) +- Creating, editing, and running dstack configurations +- Troubleshooting GPU infrastructure and running workloads + +## How it works + +dstack operates through three core components: + +1. `dstack` server - Control plane running locally, self-hosted, or via dstack Sky (managed) +2. `dstack` CLI - Command-line tool for applying configurations and managing workloads +3. `dstack` configuration files - YAML files ending with `.dstack.yml` + +**Typical workflow:** +```bash +# 1. Define configuration in YAML file (e.g., train.dstack.yml, .dstack.yml, llama-serve.dstack.yml) +# 2. Apply configuration +dstack apply -f train.dstack.yml + +# 3. dstack provisions infrastructure and runs workload +# 4. Monitor with dstack ps, attach with dstack attach +``` + +The CLI applies configurations via `dstack apply`, which provisions infrastructure, schedules workloads, and manages lifecycle. Runs can be "attached" mode (by default) - interactive, blocks terminal with port forwarding and SSH access, or detached (via `-d`) – background, non-interactive. + +**Important:** Use `--help` with any CLI command if uncertain about usage or available options. + +## Configuration types + +`dstack` supports five main configuration types, each with specific use cases. Configuration files can be named `.dstack.yml` or simply `.dstack.yml`. + +**Common parameters:** All run configurations (dev environments, tasks, services) support many parameters including: +- **Git integration:** Clone repos automatically (`repo`), mount existing repos (`repos`), upload local files (`working_dir`) +- **Docker support:** Use custom Docker images (`image`), enable Docker CLI inside workloads with `docker: true` (VM-based backends only) +- **Environment & secrets:** Set environment variables (`env`), reference secrets +- **Storage:** Mount persistent volumes (`volumes`), specify disk size +- **Resources:** Define GPU, CPU, memory, and disk requirements + +See configuration reference pages for complete parameter lists. + +### 1. Dev environments +**Use for:** Interactive development with IDE integration (VS Code, Cursor, etc.). + +```yaml +type: dev-environment +python: "3.11" +ide: vscode + +resources: + gpu: 80GB + disk: 500GB +``` + +[Concept documentation](https://dstack.ai/docs/concepts/dev-environments.md) | [Configuration reference](https://dstack.ai/docs/reference/dstack.yml/dev-environment.md) + +### 2. Tasks +**Use for:** Batch jobs, training runs, fine-tuning, web applications, any executable workload. + +**Key features:** Distributed training (multi-node), port forwarding for web apps. + +```yaml +type: task +python: "3.11" +env: + - HUGGING_FACE_HUB_TOKEN +commands: + - pip install -r requirements.txt + - python train.py +ports: + - 8501 # Optional: expose ports for web apps + +resources: + gpu: A100:40GB:2 # Two 40GB A100s + disk: 200GB +``` + +**Port forwarding:** When you specify `ports`, `dstack apply` automatically forwards them to `localhost` while attached. Use `dstack attach ` to reconnect and restore port forwarding. The run name becomes an SSH alias (e.g., `ssh `) for direct access. + +**Examples:** +- [Single-node training (TRL)](https://dstack.ai/examples/single-node-training/trl/index.md) +- [Single-node training (Axolotl)](https://dstack.ai/examples/single-node-training/axolotl/index.md) +- [Distributed training (TRL)](https://dstack.ai/examples/distributed-training/trl/index.md) +- [Distributed training (Axolotl)](https://dstack.ai/examples/distributed-training/axolotl/index.md) +- [Distributed training (Ray+RAGEN)](https://dstack.ai/examples/distributed-training/ray-ragen/index.md) +- [NCCL/RCCL tests](https://dstack.ai/examples/clusters/nccl-rccl-tests/index.md) + +[Concept documentation](https://dstack.ai/docs/concepts/tasks.md) | [Configuration reference](https://dstack.ai/docs/reference/dstack.yml/task.md) + +### 3. Services +**Use for:** Deploying models or web applications as production endpoints. + +**Key features:** OpenAI-compatible model serving, auto-scaling (RPS/queue), custom gateways with HTTPS. + +```yaml +type: service +python: "3.11" +env: + - HF_TOKEN +commands: + - pip install vllm + - vllm serve meta-llama/Meta-Llama-3.1-8B-Instruct +port: 8000 +model: meta-llama/Meta-Llama-3.1-8B-Instruct + +resources: + gpu: 80GB + disk: 200GB + +scaling: + metric: rps + target: 10 +``` + +**Service endpoints:** +- Without gateway: `/proxy/services///` +- With gateway: `https://./` + +**Example:** +```bash +curl http://localhost:3000/proxy/services///v1/chat/completions \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{"model": "meta-llama/Meta-Llama-3.1-8B-Instruct", "messages": [{"role": "user", "content": "Hello!"}]}' +``` + +**Gateways:** Set up a [gateway](https://dstack.ai/docs/concepts/gateways.md) before running services to enable custom domains, HTTPS, auto-scaling rate limits, and production-grade endpoint management. Use the `dstack gateway` CLI command to manage gateways. + +**Examples:** +- [SGLang](https://dstack.ai/examples/inference/sglang/index.md) +- [vLLM](https://dstack.ai/examples/inference/vllm/index.md) +- [NIM](https://dstack.ai/examples/inference/nim/index.md) +- [TensorRT-LLM](https://dstack.ai/examples/inference/trtllm/index.md) + +[Concept documentation](https://dstack.ai/docs/concepts/services.md) | [Configuration reference](https://dstack.ai/docs/reference/dstack.yml/service.md) + +### 4. Fleets +**Use for:** Pre-provisioning infrastructure for workloads, managing on-premises GPU servers, creating auto-scaling instance pools. + +**Important:** Workloads (dev environments, tasks, services) only run if their resource requirements match at least one configured fleet. Without matching fleets, provisioning will fail. + +dstack supports two fleet types: + +#### Backend fleets (Cloud/Kubernetes) +Dynamically provision instances from configured [backends](https://dstack.ai/docs/concepts/backends.md). Use the `nodes` property for on-demand scaling: + +```yaml +type: fleet +name: my-fleet +nodes: 0..2 # Range: creates template when starting with 0, provisions on-demand + +resources: + gpu: 24GB.. # 24GB or more + disk: 100GB + +spot_policy: auto # auto (default), spot, or on-demand +idle_duration: 5m # Terminate idle instances after 5 minutes +``` + +**On-demand provisioning:** When `nodes` is a range (e.g., `0..2`, `1..10`), dstack creates an instance template. Instances are provisioned automatically when workloads need them, scaling between min and max. Set `idle_duration` to terminate idle instances. + +**Additional options:** Fleets support many configuration options including `placement: cluster` for multi-node distributed workloads requiring inter-node communication (e.g., multi-GPU training), `blocks` for resource isolation, environment variables, and more. See the configuration reference for complete details. + +#### SSH fleets (on-prem or pre-provisioned clusters) +Use existing GPU servers accessible via SSH: + +```yaml +type: fleet +name: on-prem-fleet + +ssh_config: + user: ubuntu + identity_file: ~/.ssh/id_rsa + hosts: + - 192.168.1.10 + - 192.168.1.11 +``` + +**Requirements:** Hosts must have Docker, GPU drivers, passwordless sudo, and SSH port forwarding enabled. + +[Concept documentation](https://dstack.ai/docs/concepts/fleets.md) | [Configuration reference](https://dstack.ai/docs/reference/dstack.yml/fleet.md) + +### 5. Volumes +**Use for:** Persistent storage for datasets, model checkpoints, training artifacts that persist across runs and can be shared between workloads. + +dstack supports two types of volumes: + +#### Network Volumes +Backend-specific persistent volumes (AWS EBS, GCP Persistent Disk, etc.) that can be attached to any dev environment, task, or service. + +**Define a network volume:** +```yaml +type: volume +name: my-volume + +backend: aws +region: us-east-1 + +resources: + disk: 500GB +``` + +**Attach to workloads via `volumes` property:** +```yaml +type: task +# ... other config +volumes: + - name: my-volume + path: /volume_data +``` + +#### Instance Volumes +Faster local volumes using the instance's root disk. Ideal for ephemeral storage, caching, or maximum I/O performance without persistence across instances. + +**Attach instance volumes via `volumes` property:** +```yaml +type: dev-environment +# ... other config +volumes: + - name: my-instance-volume + path: /cache_data +``` + +**Note:** Volumes can be attached to dev environments, tasks, and services using the `volumes` property. Network volumes persist independently, while instance volumes are tied to the instance lifecycle. + +[Concept documentation](https://dstack.ai/docs/concepts/volumes.md) | [Configuration reference](https://dstack.ai/docs/reference/dstack.yml/volume.md) + +## Essential Commands + +### Apply Configurations + +```bash +# Apply and attach (interactive, blocks terminal with port forwarding) +dstack apply -f train.dstack.yml + +# Apply detached (background, no attachment) +dstack apply -f serve.dstack.yml -d + +# Force rerun +dstack apply -f finetune.dstack.yml --force + +# Override defaults +dstack apply -f .dstack.yml --max-price 2.5 +``` + +### Fleet Management + +```bash +# Create/update fleet +dstack apply -f fleet.dstack.yml + +# List fleets +dstack fleet + +# Get fleet details +dstack fleet get my-fleet + +# Get fleet details as JSON (for troubleshooting) +dstack fleet get my-fleet --json + +# Delete entire fleet +dstack fleet delete my-fleet + +# Delete specific instance from fleet +dstack fleet delete-instance my-fleet +``` + +### Monitor Runs + +```bash +# List all runs +dstack ps + +# JSON output (for troubleshooting/scripting) +dstack ps --json + +# Verbose output with full details +dstack ps -v + +# Watch mode (auto-refresh) +dstack ps -w + +# Get specific run details as JSON +dstack run get my-run-name --json +``` + +### Attach to runs + +**What is attaching?** Attaching connects to an existing run to restore port forwarding (for tasks/services with ports) and enable SSH access. The run name becomes an SSH alias (e.g., `ssh my-run-name`) configured in `~/.dstack/ssh/config` (included to `~/.ssh/config`). + +**Note:** `dstack apply` automatically attaches when run completes provisioning. Use `dstack attach` to reconnect after detaching or to access detached runs. + +```bash +# Attach to existing run (restores port forwarding + SSH) +dstack attach my-run-name + +# Attach and replay logs from start +dstack attach my-run-name --logs +``` + +### View Logs + +```bash +# Stream logs (tail mode) +dstack logs my-run-name + +# Debug mode (includes additional runner logs) +dstack logs my-run-name -d + +# Fetch logs from specific replica (multi-node runs) +dstack logs my-run-name --replica 1 + +# Fetch logs from specific job +dstack logs my-run-name --job 0 +``` + +### Stop runs + +```bash +# Stop specific run +dstack stop my-run-name + +# Abort (force stop) +dstack stop my-run-name --abort + +# Stop all runs +dstack stop --all +``` + +### Check available resources + +**Note:** `dstack offer` shows all available GPU instances from configured backends, not just those in fleets. Use it to discover what resources are available for provisioning. + +```bash +# List available GPU offers from all backends +dstack offer + +# Filter by backend +dstack offer --backend aws + +# Filter by GPU requirements +dstack offer --gpu A100 +``` + +## Troubleshooting + +When diagnosing issues with dstack workloads or infrastructure: + +1. **Use JSON output for detailed inspection:** + ```bash + dstack fleet get my-fleet --json | jq . + dstack run get my-run --json | jq . + ``` + +2. **Check verbose run status:** + ```bash + dstack ps -v # Shows provisioning state, instance details, errors + ``` + +3. **Examine logs with debug output:** + ```bash + dstack logs my-run -d # Includes additional runner logs + ``` + +4. **Attach with log replay:** + ```bash + dstack attach my-run --logs # See full output from start + ``` + +5. **Check fleet capacity:** + ```bash + dstack fleet get my-fleet # View current instances and utilization + ``` + +6. **Verify resource availability:** + ```bash + dstack offer --backend aws --gpu A100 # Check if resources exist + ``` + +Common issues: +- **No capacity errors:** Check `dstack offer` for availability, adjust resource requirements, or enable more backends +- **No matching fleet:** Ensure at least one fleet matches workload resource requirements; use `dstack fleet` to list configured fleets +- **Configuration errors:** Validate YAML syntax; check `dstack apply` output for specific errors +- **Provisioning timeouts:** Use `dstack ps -v` to see provisioning status; consider spot vs on-demand +- **Connection issues:** Verify server status, check authentication, ensure network access to backends +- **Resource mismatch:** Check that fleet resource specs (GPU type, memory, disk) are compatible with workload requirements + +[Troubleshooting guide](https://dstack.ai/docs/guides/troubleshooting.md) + +## Additional Resources + +**Core Documentation:** +- [Overview](https://dstack.ai/docs/overview.md) +- [Installation](https://dstack.ai/docs/installation.md) +- [Quickstart](https://dstack.ai/docs/quickstart.md) + +**Additional Concepts:** +- [Secrets](https://dstack.ai/docs/concepts/secrets.md) - Manage sensitive credentials +- [Projects](https://dstack.ai/docs/concepts/projects.md) - Projects isolate the resources of different teams +- [Metrics](https://dstack.ai/docs/concepts/metrics.md) - Track GPU utilization +- [Events](https://dstack.ai/docs/concepts/events.md) - Monitor system events + +**Guides:** +- [Server deployment](https://dstack.ai/docs/guides/server-deployment.md) (for server administration) +- [Pro tips](https://dstack.ai/docs/guides/protips.md) + +**Accelerator-specific examples:** +- [AMD](https://dstack.ai/examples/accelerators/amd/index.md) +- [Google TPU](https://dstack.ai/examples/accelerators/tpu/index.md) +- [Tenstorrent](https://dstack.ai/examples/accelerators/tenstorrent/index.md) + +**Full Documentation:** https://dstack.ai/llms-full.txt From 854ae5964d4925f80efefc364c6d9dd91f1957d2 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 15:09:16 +0100 Subject: [PATCH 04/21] [Docs] Fixed proper .md .dstack.yml schedma pages generation --- mkdocs.yml | 3 +- scripts/docs/gen_schema_reference.py | 15 ++++--- scripts/docs/hooks.py | 67 ++++++++++++++++++++++++++-- 3 files changed, 75 insertions(+), 10 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index b8638e0a6c..448cafbc15 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -137,11 +137,10 @@ plugins: "docs/guides/migration.md": "docs/guides/upgrade.md" - typeset - gen-files: - # TODO: convert these to hooks + # TODO: convert these to hooks (schema reference migrated) scripts: # always relative to mkdocs.yml - scripts/docs/gen_cli_reference.py - scripts/docs/gen_openapi_reference.py - - scripts/docs/gen_schema_reference.py - scripts/docs/gen_rest_plugin_spec_reference.py - mkdocstrings: handlers: diff --git a/scripts/docs/gen_schema_reference.py b/scripts/docs/gen_schema_reference.py index e7c2cd62e6..8f25283181 100644 --- a/scripts/docs/gen_schema_reference.py +++ b/scripts/docs/gen_schema_reference.py @@ -150,6 +150,15 @@ def sub_schema_reference(match: re.Match) -> str: ) +def expand_schema_references(text: str) -> str: + """Expand #SCHEMA# placeholders in markdown text. Used by hooks when gen-files is not used.""" + return re.sub( + r"( *)#SCHEMA#\s+(dstack\.[.a-z_0-9A-Z]+)\s*((?:\n {4}[^\n]+)*)\n", + sub_schema_reference, + text, + ) + + def process_file(file: File): if not fnmatch(file.src_uri, FILE_PATTERN): return @@ -161,11 +170,7 @@ def process_file(file: File): # overrides: # name: # required: true - text = re.sub( - r"( *)#SCHEMA#\s+(dstack\.[.a-z_0-9A-Z]+)\s*((?:\n {4}[^\n]+)*)\n", - sub_schema_reference, - text, - ) + text = expand_schema_references(text) with mkdocs_gen_files.open(file.src_uri, "w") as f: f.write(text) diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index 99ba5ac50c..19b970c940 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -1,8 +1,10 @@ +import importlib.util import json import logging import mimetypes import os import shutil +import sys import yaml @@ -13,6 +15,49 @@ WELL_KNOWN_SKILLS_DIR = ".well-known/skills" SKILL_PATH = ("skills", "dstack", "SKILL.md") DISABLE_EXAMPLES_ENV = "DSTACK_DOCS_DISABLE_EXAMPLES" +SCHEMA_REFERENCE_PREFIX = "docs/reference/" + + +def _expand_schema_references(text: str) -> str: + """Lazy load gen_schema_reference by file path so it works regardless of sys.path.""" + hooks_dir = os.path.dirname(os.path.abspath(__file__)) + gen_path = os.path.join(hooks_dir, "gen_schema_reference.py") + spec = importlib.util.spec_from_file_location("gen_schema_reference", gen_path) + if spec is None or spec.loader is None: + raise ImportError(f"Cannot load {gen_path}") + module = importlib.util.module_from_spec(spec) + sys.modules["gen_schema_reference"] = module + spec.loader.exec_module(module) + return module.expand_schema_references(text) + + +def _get_schema_expanded_content(rel_path, config, src_path=None): + """Return expanded markdown for reference/**/*.md that contain #SCHEMA#, else None. + If src_path is given (e.g. from on_post_build loop), read from it; else build path from config. + """ + if not rel_path.startswith(SCHEMA_REFERENCE_PREFIX) or not rel_path.endswith(".md"): + log.debug(f"Skipping {rel_path}: not in {SCHEMA_REFERENCE_PREFIX} or not .md") + return None + if src_path is None: + repo_root = os.path.dirname(config["config_file_path"]) + docs_dir = config["docs_dir"] + if not os.path.isabs(docs_dir): + docs_dir = os.path.join(repo_root, docs_dir) + src_path = os.path.join(docs_dir, rel_path.replace("/", os.sep)) + if not os.path.isfile(src_path): + log.debug(f"Skipping {rel_path}: source file not found at {src_path}") + return None + try: + with open(src_path, "r", encoding="utf-8") as f: + text = f.read() + except OSError as e: + log.debug(f"Skipping {rel_path}: error reading file: {e}") + return None + if "#SCHEMA#" not in text: + log.debug(f"Skipping {rel_path}: no #SCHEMA# placeholders found") + return None + log.debug(f"Expanding schema references in {rel_path}") + return _expand_schema_references(text) def _get_materialized_content(rel_path, config): @@ -32,8 +77,15 @@ def _get_materialized_content(rel_path, config): def on_page_read_source(page, config): - """Use README content for example stubs when rendering HTML.""" - return _get_materialized_content(page.file.src_uri, config) + """Use README content for example stubs and expanded schema for reference docs when rendering HTML.""" + rel_path = page.file.src_uri + content = _get_materialized_content(rel_path, config) + if content is not None: + return content + content = _get_schema_expanded_content(rel_path, config) + if content is not None: + return content + return None def on_page_context(context, page, config, nav): @@ -75,9 +127,18 @@ def on_post_build(config): with open(dest_path, "w", encoding="utf-8") as f: f.write(content) else: + # Check if this is a schema reference file that needs expansion + content = _get_schema_expanded_content(rel_path, config, src_path=src_path) dest_path = os.path.join(site_dir, rel_path) os.makedirs(os.path.dirname(dest_path), exist_ok=True) - shutil.copy2(src_path, dest_path) + if content is not None: + # Write expanded schema content + log.info(f"Expanding schema references in {rel_path}") + with open(dest_path, "w", encoding="utf-8") as f: + f.write(content) + else: + # Just copy the file as-is + shutil.copy2(src_path, dest_path) _write_well_known_skills(config, site_dir) From 52f705f250dbcadd23a386ce3a1d3323c7e99d0f Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 15:20:56 +0100 Subject: [PATCH 05/21] [Docs] Create .nojekyll file to prevent GitHub Pages from ignoring .well-known directory --- docs/.nojekyll | 0 scripts/docs/hooks.py | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 docs/.nojekyll diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index 19b970c940..644f9d8cdb 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -111,6 +111,11 @@ def on_post_build(config): site_dir = config["site_dir"] docs_dir = config["docs_dir"] + # Create .nojekyll to prevent GitHub Pages from ignoring .well-known directory + nojekyll_path = os.path.join(site_dir, ".nojekyll") + with open(nojekyll_path, "w") as f: + f.write("") + for root, _, files in os.walk(docs_dir): for file in files: if not file.endswith(".md"): From c0e5a38f9ac98f5c0f29b057564d117e00069b52 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 16:06:38 +0100 Subject: [PATCH 06/21] [Docs] Add _config.yml to explicitly include .well-known directory Create _config.yml file in site directory to ensure Jekyll includes the .well-known directory. This complements the .nojekyll file and ensures the skills discovery infrastructure is properly deployed. Co-Authored-By: Claude Sonnet 4.5 --- scripts/docs/hooks.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index 644f9d8cdb..9e94243b9b 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -116,6 +116,12 @@ def on_post_build(config): with open(nojekyll_path, "w") as f: f.write("") + # Create _config.yml to explicitly include .well-known directory + # This ensures Jekyll (if it runs) includes the .well-known directory + config_yml_path = os.path.join(site_dir, "_config.yml") + with open(config_yml_path, "w") as f: + f.write('include: [".well-known"]\n') + for root, _, files in os.walk(docs_dir): for file in files: if not file.endswith(".md"): From ba40d6caac117f3d08335bce060b65fe8d1e6d21 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 16:23:35 +0100 Subject: [PATCH 07/21] [Docs] Include hidden files in artifact upload Add include-hidden-files: true to upload-artifact action to ensure .nojekyll and .well-known directory are included in the build artifact. Co-Authored-By: Claude Sonnet 4.5 --- .github/workflows/build-docs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 140ba82204..6ca99d764a 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -23,3 +23,4 @@ jobs: name: site path: site retention-days: 1 + include-hidden-files: true From 532fd5c70447c9fa8ee3a692ead95bdb8623de68 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 16:31:22 +0100 Subject: [PATCH 08/21] [Docs] Strip trailing whitespace from skill description Remove trailing newline from description field in skills index.json to match expected format. Co-Authored-By: Claude Sonnet 4.5 --- scripts/docs/hooks.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index 9e94243b9b..e01fd33662 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -189,7 +189,11 @@ def _write_well_known_skills(config, site_dir): shutil.copy2(skill_src, os.path.join(site_dir, "skill.md")) index_path = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, "index.json") - index = {"skills": [{"name": name, "description": description[:1024], "files": ["skill.md"]}]} + index = { + "skills": [ + {"name": name, "description": description.strip()[:1024], "files": ["skill.md"]} + ] + } with open(index_path, "w", encoding="utf-8") as f: json.dump(index, f, indent=2) From 7eed3d4bb93d39783c83b2bf835c70e131b3f223 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 16:42:51 +0100 Subject: [PATCH 09/21] [Docs] Use uppercase SKILL.md for skills discovery The npx skills tool fetches SKILL.md (uppercase) from the URL, so we need to serve the file with that exact case. Co-Authored-By: Claude Sonnet 4.5 --- scripts/docs/hooks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index e01fd33662..dfd67a5b8f 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -184,14 +184,14 @@ def _write_well_known_skills(config, site_dir): out_dir = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, name) os.makedirs(out_dir, exist_ok=True) - shutil.copy2(skill_src, os.path.join(out_dir, "skill.md")) + shutil.copy2(skill_src, os.path.join(out_dir, "SKILL.md")) # Serve skill at site root (e.g. https://dstack.ai/skill.md) from skills/dstack/SKILL.md shutil.copy2(skill_src, os.path.join(site_dir, "skill.md")) index_path = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, "index.json") index = { "skills": [ - {"name": name, "description": description.strip()[:1024], "files": ["skill.md"]} + {"name": name, "description": description.strip()[:1024], "files": ["SKILL.md"]} ] } with open(index_path, "w", encoding="utf-8") as f: From 195187325ba7bcc314e4a3f02bf61b01bb571c81 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 16:46:32 +0100 Subject: [PATCH 10/21] [Docs] Serve skill.md as both uppercase and lowercase at root Copy the skill file as both skill.md and SKILL.md at the site root to support both URL variants. Co-Authored-By: Claude Sonnet 4.5 --- scripts/docs/hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/docs/hooks.py b/scripts/docs/hooks.py index dfd67a5b8f..4b9345ee2d 100644 --- a/scripts/docs/hooks.py +++ b/scripts/docs/hooks.py @@ -185,8 +185,9 @@ def _write_well_known_skills(config, site_dir): out_dir = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, name) os.makedirs(out_dir, exist_ok=True) shutil.copy2(skill_src, os.path.join(out_dir, "SKILL.md")) - # Serve skill at site root (e.g. https://dstack.ai/skill.md) from skills/dstack/SKILL.md + # Serve skill at site root (both skill.md and SKILL.md) from skills/dstack/SKILL.md shutil.copy2(skill_src, os.path.join(site_dir, "skill.md")) + shutil.copy2(skill_src, os.path.join(site_dir, "SKILL.md")) index_path = os.path.join(site_dir, WELL_KNOWN_SKILLS_DIR, "index.json") index = { From 689a0393b5590c43b59b084a29581525c7adf51a Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 17:07:36 +0100 Subject: [PATCH 11/21] [Docs] Add best practices and behavioral notes to SKILL.md - Prefer --logs flag with dstack attach - Document dstack apply confirmation flow and streaming behavior - Prefer naming run configurations - Prefer modifying configs over passing CLI parameters - Use -y flag for confirmed delete/stop operations - Note that commands may require confirmation Co-Authored-By: Claude Sonnet 4.5 --- skills/dstack/SKILL.md | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/skills/dstack/SKILL.md b/skills/dstack/SKILL.md index 67b4d4f0c4..c72367e9ed 100644 --- a/skills/dstack/SKILL.md +++ b/skills/dstack/SKILL.md @@ -38,6 +38,12 @@ The CLI applies configurations via `dstack apply`, which provisions infrastructu **Important:** Use `--help` with any CLI command if uncertain about usage or available options. +**Best practices:** +- Prefer giving run configurations a `name` property for easier management and identification +- Prefer modifying configuration files over passing parameters to `dstack apply` (unless it's an exception) +- When user confirms deletion/stop operations, use `-y` flag to skip confirmation prompts +- Many dstack commands require confirmation - pay attention to command output and respond appropriately rather than waiting indefinitely + ## Configuration types `dstack` supports five main configuration types, each with specific use cases. Configuration files can be named `.dstack.yml` or simply `.dstack.yml`. @@ -241,17 +247,26 @@ volumes: ### Apply Configurations +**Important behavior:** +- `dstack apply` shows a plan with estimated costs and may ask for confirmation (respond with `y` or use `-y` flag to skip) +- Once confirmed, it provisions infrastructure and streams real-time output to the terminal +- In attached mode (default), the terminal blocks and shows output - use timeout or Ctrl+C to interrupt if you need to continue with other commands +- In detached mode (`-d`), runs in background without blocking the terminal + ```bash # Apply and attach (interactive, blocks terminal with port forwarding) dstack apply -f train.dstack.yml +# Apply with automatic confirmation +dstack apply -f train.dstack.yml -y + # Apply detached (background, no attachment) dstack apply -f serve.dstack.yml -d # Force rerun dstack apply -f finetune.dstack.yml --force -# Override defaults +# Override defaults (prefer modifying config file instead, unless it's an exception) dstack apply -f .dstack.yml --max-price 2.5 ``` @@ -270,11 +285,11 @@ dstack fleet get my-fleet # Get fleet details as JSON (for troubleshooting) dstack fleet get my-fleet --json -# Delete entire fleet -dstack fleet delete my-fleet +# Delete entire fleet (use -y when user already confirmed) +dstack fleet delete my-fleet -y -# Delete specific instance from fleet -dstack fleet delete-instance my-fleet +# Delete specific instance from fleet (use -y when user already confirmed) +dstack fleet delete-instance my-fleet -y ``` ### Monitor Runs @@ -303,11 +318,11 @@ dstack run get my-run-name --json **Note:** `dstack apply` automatically attaches when run completes provisioning. Use `dstack attach` to reconnect after detaching or to access detached runs. ```bash -# Attach to existing run (restores port forwarding + SSH) -dstack attach my-run-name - -# Attach and replay logs from start +# Attach and replay logs from start (preferred, unless asked otherwise) dstack attach my-run-name --logs + +# Attach without replaying logs (restores port forwarding + SSH only) +dstack attach my-run-name ``` ### View Logs @@ -332,11 +347,14 @@ dstack logs my-run-name --job 0 # Stop specific run dstack stop my-run-name +# Stop with confirmation skipped (use when user already confirmed) +dstack stop my-run-name -y + # Abort (force stop) dstack stop my-run-name --abort # Stop all runs -dstack stop --all +dstack stop --all -y ``` ### Check available resources From ea851eddfd60fcb584830a534a1fbc8d51fe6739 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 17:08:06 +0100 Subject: [PATCH 12/21] [Docs] Remove non-existent --all flag from dstack stop Co-Authored-By: Claude Sonnet 4.5 --- skills/dstack/SKILL.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/skills/dstack/SKILL.md b/skills/dstack/SKILL.md index c72367e9ed..c04c3134d6 100644 --- a/skills/dstack/SKILL.md +++ b/skills/dstack/SKILL.md @@ -352,9 +352,6 @@ dstack stop my-run-name -y # Abort (force stop) dstack stop my-run-name --abort - -# Stop all runs -dstack stop --all -y ``` ### Check available resources From 3315166f306127d41b04a74afd8dc5bb39397be2 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 17:12:40 +0100 Subject: [PATCH 13/21] Removed `Check offers` from `Installation` --- docs/docs/installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/installation.md b/docs/docs/installation.md index 588f72ac15..b5af07f8e4 100644 --- a/docs/docs/installation.md +++ b/docs/docs/installation.md @@ -124,9 +124,9 @@ Configuration is updated at ~/.dstack/config.yml This configuration is stored in `~/.dstack/config.yml`. -### Check offers + -To verify that both the server and CLI are properly configured, use the [`dstack offer`](reference/cli/dstack/offer.md#list-gpu-offers) command to list available GPU offers. If you don't see valid offers, ensure you've set up [backends](concepts/backends.md). + ??? info "Shell autocompletion" From 1ad2a18bdbc25f59c4b7d992cdfb09fb68405485 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 17:20:59 +0100 Subject: [PATCH 14/21] [Docs] Fix swagger rendering in REST API docs - Add generated openapi.json to source directory so render_swagger can find it - Enable allow_arbitrary_locations in render_swagger config - Gen-files plugin will keep the file updated during builds Co-Authored-By: Claude Sonnet 4.5 --- docs/docs/reference/api/rest/openapi.json | 1 + mkdocs.yml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/docs/reference/api/rest/openapi.json diff --git a/docs/docs/reference/api/rest/openapi.json b/docs/docs/reference/api/rest/openapi.json new file mode 100644 index 0000000000..775e035ddd --- /dev/null +++ b/docs/docs/reference/api/rest/openapi.json @@ -0,0 +1 @@ +{"openapi": "3.1.0", "info": {"title": "OpenAPI Spec", "version": "0.0.0"}, "servers": [{"url": "http://localhost:3000", "description": "Local server"}, {"url": "https://sky.dstack.ai", "description": "Managed server"}], "paths": {"/api/server/get_info": {"post": {"tags": ["server"], "summary": "Get Server Info", "operationId": "get_server_info_api_server_get_info_post", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ServerInfoRequest"}}}}}}}, "/api/users/list": {"post": {"tags": ["users"], "summary": "List Users", "description": "Returns users visible to the user, sorted by descending `created_at`.\n\nAdmins see all non-deleted users. Non-admins only see themselves.\n\nThe results are paginated. To get the next page, pass `created_at` and `id` of\nthe last user from the previous page as `prev_created_at` and `prev_id`.", "operationId": "list_users_api_users_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListUsersRequestRequest"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"anyOf": [{"items": {"$ref": "#/components/schemas/UserRequest"}, "type": "array"}, {"$ref": "#/components/schemas/UsersInfoListRequest"}], "title": "Response List Users Api Users List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/get_my_user": {"post": {"tags": ["users"], "summary": "Get My User", "operationId": "get_my_user_api_users_get_my_user_post", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserWithCredsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/get_user": {"post": {"tags": ["users"], "summary": "Get User", "operationId": "get_user_api_users_get_user_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetUserRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserWithCredsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/create": {"post": {"tags": ["users"], "summary": "Create User", "operationId": "create_user_api_users_create_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateUserRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/update": {"post": {"tags": ["users"], "summary": "Update User", "operationId": "update_user_api_users_update_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateUserRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/refresh_ssh_key": {"post": {"tags": ["users"], "summary": "Refresh Ssh Key", "operationId": "refresh_ssh_key_api_users_refresh_ssh_key_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RefreshTokenRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserWithCredsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/refresh_token": {"post": {"tags": ["users"], "summary": "Refresh Token", "operationId": "refresh_token_api_users_refresh_token_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RefreshTokenRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserWithCredsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/users/delete": {"post": {"tags": ["users"], "summary": "Delete Users", "operationId": "delete_users_api_users_delete_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteUsersRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/auth/list_providers": {"post": {"tags": ["auth"], "summary": "List Providers", "description": "Returns OAuth2 providers registered on the server.", "operationId": "list_providers_api_auth_list_providers_post", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/OAuthProviderInfoRequest"}, "type": "array", "title": "Response List Providers Api Auth List Providers Post"}}}}}}}, "/api/auth/get_next_redirect": {"post": {"tags": ["auth"], "summary": "Get Next Redirect", "description": "A helper endpoint that returns the next redirect URL in case the state encodes it.\nCan be used by the UI after the redirect from the provider\nto determine if the user needs to be redirected further (CLI login)\nor the auth callback endpoint needs to be called directly (UI login).", "operationId": "get_next_redirect_api_auth_get_next_redirect_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/OAuthGetNextRedirectRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OAuthGetNextRedirectResponseRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/projects/list": {"post": {"tags": ["projects"], "summary": "List Projects", "description": "Returns projects visible to the user.\n\nReturns all accessible projects (member projects for regular users, all non-deleted\nprojects for global admins, plus public projects if `include_not_joined` is `True`).\n\n`members` and `backends` are always empty - call `/api/projects/{project_name}/get` to retrieve them.", "operationId": "list_projects_api_projects_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListProjectsRequestRequest"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"anyOf": [{"items": {"$ref": "#/components/schemas/ProjectRequest"}, "type": "array"}, {"$ref": "#/components/schemas/ProjectsInfoListRequest"}], "title": "Response List Projects Api Projects List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/list_only_no_fleets": {"post": {"tags": ["projects"], "summary": "List Only No Fleets", "description": "Returns only projects where the user is a member and that have no active fleets,\nsorted by ascending `created_at`.\n\nActive fleets are those with `deleted == False`. Projects with deleted fleets\n(but no active fleets) are included.\n\n`members` and `backends` are always empty - call `/api/projects/{project_name}/get` to retrieve them.", "operationId": "list_only_no_fleets_api_projects_list_only_no_fleets_post", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/ProjectRequest"}, "type": "array", "title": "Response List Only No Fleets Api Projects List Only No Fleets Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/create": {"post": {"tags": ["projects"], "summary": "Create Project", "operationId": "create_project_api_projects_create_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateProjectRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/delete": {"post": {"tags": ["projects"], "summary": "Delete Projects", "operationId": "delete_projects_api_projects_delete_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteProjectsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/{project_name}/get": {"post": {"tags": ["projects"], "summary": "Get Project", "operationId": "get_project_api_projects__project_name__get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/{project_name}/set_members": {"post": {"tags": ["projects"], "summary": "Set Project Members", "operationId": "set_project_members_api_projects__project_name__set_members_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetProjectMembersRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/{project_name}/add_members": {"post": {"tags": ["projects"], "summary": "Add Project Members", "operationId": "add_project_members_api_projects__project_name__add_members_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddProjectMemberRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/{project_name}/remove_members": {"post": {"tags": ["projects"], "summary": "Remove Project Members", "operationId": "remove_project_members_api_projects__project_name__remove_members_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RemoveProjectMemberRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/projects/{project_name}/update": {"post": {"tags": ["projects"], "summary": "Update Project", "operationId": "update_project_api_projects__project_name__update_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateProjectRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/backends/list_types": {"post": {"tags": ["backends"], "summary": "List Backend Types", "operationId": "list_backend_types_api_backends_list_types_post", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}}}}, "/api/project/{project_name}/backends/create": {"post": {"tags": ["backends"], "summary": "Create Backend", "operationId": "create_backend_api_project__project_name__backends_create_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/AWSBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/AzureBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CloudRiftBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CudoBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VerdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/BaseDigitalOceanBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/GCPBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/HotAisleBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/KubernetesBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/LambdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/OCIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/NebiusBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/RunpodBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/TensorDockBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VastAIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VultrBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/DstackBackendConfigRequest"}], "title": "Body"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/AWSBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/AzureBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CloudRiftBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CudoBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VerdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/BaseDigitalOceanBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/GCPBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/HotAisleBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/KubernetesBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/LambdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/OCIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/NebiusBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/RunpodBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/TensorDockBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VastAIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VultrBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/DstackBackendConfigRequest"}], "title": "Response Create Backend Api Project Project Name Backends Create Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/backends/update": {"post": {"tags": ["backends"], "summary": "Update Backend", "operationId": "update_backend_api_project__project_name__backends_update_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/AWSBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/AzureBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CloudRiftBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CudoBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VerdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/BaseDigitalOceanBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/GCPBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/HotAisleBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/KubernetesBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/LambdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/OCIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/NebiusBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/RunpodBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/TensorDockBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VastAIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VultrBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/DstackBackendConfigRequest"}], "title": "Body"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/AWSBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/AzureBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CloudRiftBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CudoBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VerdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/BaseDigitalOceanBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/GCPBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/HotAisleBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/KubernetesBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/LambdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/OCIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/NebiusBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/RunpodBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/TensorDockBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VastAIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VultrBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/DstackBackendConfigRequest"}], "title": "Response Update Backend Api Project Project Name Backends Update Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/backends/delete": {"post": {"tags": ["backends"], "summary": "Delete Backends", "operationId": "delete_backends_api_project__project_name__backends_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteBackendsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/backends/{backend_name}/config_info": {"post": {"tags": ["backends"], "summary": "Get Backend Config Info", "operationId": "get_backend_config_info_api_project__project_name__backends__backend_name__config_info_post", "parameters": [{"required": true, "schema": {"$ref": "#/components/schemas/BackendType"}, "name": "backend_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/AWSBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/AzureBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CloudRiftBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/CudoBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VerdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/BaseDigitalOceanBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/GCPBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/HotAisleBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/KubernetesBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/LambdaBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/OCIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/NebiusBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/RunpodBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/TensorDockBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VastAIBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/VultrBackendConfigWithCredsRequest"}, {"$ref": "#/components/schemas/DstackBackendConfigRequest"}], "title": "Response Get Backend Config Info Api Project Project Name Backends Backend Name Config Info Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/backends/create_yaml": {"post": {"tags": ["backends"], "summary": "Create Backend Yaml", "operationId": "create_backend_yaml_api_project__project_name__backends_create_yaml_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateBackendYAMLRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/backends/update_yaml": {"post": {"tags": ["backends"], "summary": "Update Backend Yaml", "operationId": "update_backend_yaml_api_project__project_name__backends_update_yaml_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateBackendYAMLRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/backends/{backend_name}/get_yaml": {"post": {"tags": ["backends"], "summary": "Get Backend Yaml", "operationId": "get_backend_yaml_api_project__project_name__backends__backend_name__get_yaml_post", "parameters": [{"required": true, "schema": {"$ref": "#/components/schemas/BackendType"}, "name": "backend_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BackendInfoYAMLRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/fleets/list": {"post": {"tags": ["fleets"], "summary": "List Fleets", "description": "Returns all fleets and instances within them visible to user sorted by descending `created_at`.\n`project_name` and `only_active` can be specified as filters.\nIncludes only active fleet instances. To list all fleet instances, use `/api/instances/list`.\n\nThe results are paginated. To get the next page, pass `created_at` and `id` of\nthe last fleet from the previous page as `prev_created_at` and `prev_id`.", "operationId": "list_fleets_api_fleets_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListFleetsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/FleetRequest"}, "type": "array", "title": "Response List Fleets Api Fleets List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/list": {"post": {"tags": ["fleets"], "summary": "List Project Fleets", "description": "Returns all fleets in the project.\nIncludes only active fleet instances. To list all fleet instances, use `/api/instances/list`.", "operationId": "list_project_fleets_api_project__project_name__fleets_list_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/FleetRequest"}, "type": "array", "title": "Response List Project Fleets Api Project Project Name Fleets List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/get": {"post": {"tags": ["fleets"], "summary": "Get Fleet", "description": "Returns a fleet given `name` or `id`.\nIf given `name`, does not return deleted fleets.\nIf given `id`, returns deleted fleets.", "operationId": "get_fleet_api_project__project_name__fleets_get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetFleetRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FleetRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/get_plan": {"post": {"tags": ["fleets"], "summary": "Get Plan", "description": "Returns a fleet plan for the given fleet configuration.", "operationId": "get_plan_api_project__project_name__fleets_get_plan_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetFleetPlanRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FleetPlanRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/apply": {"post": {"tags": ["fleets"], "summary": "Apply Plan", "description": "Creates a new fleet or updates an existing fleet.\nErrors if the expected current resource from the plan does not match the current resource.\nUse `force: true` to apply even if the current resource does not match.", "operationId": "apply_plan_api_project__project_name__fleets_apply_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApplyFleetPlanRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FleetRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/create": {"post": {"tags": ["fleets"], "summary": "Create Fleet", "description": "Creates a fleet given a fleet configuration.", "operationId": "create_fleet_api_project__project_name__fleets_create_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateFleetRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FleetRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "deprecated": true, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/delete": {"post": {"tags": ["fleets"], "summary": "Delete Fleets", "description": "Deletes one or more fleets.", "operationId": "delete_fleets_api_project__project_name__fleets_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteFleetsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/fleets/delete_instances": {"post": {"tags": ["fleets"], "summary": "Delete Fleet Instances", "description": "Deletes one or more instances within the fleet.", "operationId": "delete_fleet_instances_api_project__project_name__fleets_delete_instances_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteFleetInstancesRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/instances/list": {"post": {"tags": ["instances"], "summary": "List Instances", "description": "Returns all instances visible to user sorted by descending `created_at`.\n`project_names` and `fleet_ids` can be specified as filters.\n\nThe results are paginated. To get the next page, pass `created_at` and `id` of\nthe last instance from the previous page as `prev_created_at` and `prev_id`.", "operationId": "list_instances_api_instances_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListInstancesRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/InstanceRequest"}, "type": "array", "title": "Response List Instances Api Instances List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/instances/get_instance_health_checks": {"post": {"tags": ["instances"], "summary": "Get Instance Health Checks", "operationId": "get_instance_health_checks_api_project__project_name__instances_get_instance_health_checks_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetInstanceHealthChecksRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetInstanceHealthChecksResponseRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/repos/list": {"post": {"tags": ["repos"], "summary": "List Repos", "operationId": "list_repos_api_project__project_name__repos_list_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/RepoHeadRequest"}, "type": "array", "title": "Response List Repos Api Project Project Name Repos List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/repos/get": {"post": {"tags": ["repos"], "summary": "Get Repo", "operationId": "get_repo_api_project__project_name__repos_get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetRepoRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RepoHeadWithCredsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/repos/init": {"post": {"tags": ["repos"], "summary": "Init Repo", "description": "Creates or updates a repo with the repo info and repo creds.\nRuns belong to repos, so this endpoint must be called before applying run configurations.\nYou can create `virtual` repos if you don't use git repos.", "operationId": "init_repo_api_project__project_name__repos_init_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SaveRepoCredsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/repos/delete": {"post": {"tags": ["repos"], "summary": "Delete Repos", "operationId": "delete_repos_api_project__project_name__repos_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteReposRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/repos/upload_code": {"post": {"tags": ["repos"], "summary": "Upload Code", "operationId": "upload_code_api_project__project_name__repos_upload_code_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Repo Id"}, "name": "repo_id", "in": "query"}], "requestBody": {"content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/Body_upload_code_api_project__project_name__repos_upload_code_post"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/runs/list": {"post": {"tags": ["runs"], "summary": "List Runs", "description": "Returns all runs visible to user sorted by descending `submitted_at`.\n`project_name`, `repo_id`, `username`, and `only_active` can be specified as filters.\nSetting `only_active` to `true` excludes finished runs and deleted runs.\nSpecifying `repo_id` without `project_name` returns no runs.\n\nThe results are paginated. To get the next page, pass `submitted_at` and `id` of\nthe last run from the previous page as `prev_submitted_at` and `prev_run_id`.", "operationId": "list_runs_api_runs_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListRunsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/RunRequest"}, "type": "array", "title": "Response List Runs Api Runs List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/runs/get": {"post": {"tags": ["runs"], "summary": "Get Run", "description": "Returns a run given `run_name` or `id`.\nIf given `run_name`, does not return deleted runs.\nIf given `id`, returns deleted runs.", "operationId": "get_run_api_project__project_name__runs_get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetRunRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RunRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/runs/get_plan": {"post": {"tags": ["runs"], "summary": "Get Plan", "description": "Returns a run plan for the given run spec.\nThis is an optional step before calling `/apply`.", "operationId": "get_plan_api_project__project_name__runs_get_plan_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetRunPlanRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RunPlanRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/runs/apply": {"post": {"tags": ["runs"], "summary": "Apply Plan", "description": "Creates a new run or updates an existing run.\nErrors if the expected current resource from the plan does not match the current resource.\nUse `force: true` to apply even if the current resource does not match.\nIf the existing run is active and cannot be updated, it must be stopped first.", "operationId": "apply_plan_api_project__project_name__runs_apply_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApplyRunPlanRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RunRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/runs/stop": {"post": {"tags": ["runs"], "summary": "Stop Runs", "description": "Stop one or more runs.", "operationId": "stop_runs_api_project__project_name__runs_stop_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/StopRunsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/runs/delete": {"post": {"tags": ["runs"], "summary": "Delete Runs", "description": "Delete one or more runs. The runs must be stopped before they can be deleted.", "operationId": "delete_runs_api_project__project_name__runs_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteRunsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/runs/submit": {"post": {"tags": ["runs"], "summary": "Submit Run", "operationId": "submit_run_api_project__project_name__runs_submit_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SubmitRunRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RunRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "deprecated": true, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gpus/list": {"post": {"tags": ["gpus"], "summary": "List Gpus", "operationId": "list_gpus_api_project__project_name__gpus_list_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListGpusRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListGpusResponseRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/metrics/job/{run_name}": {"get": {"tags": ["metrics"], "summary": "Get Job Metrics", "description": "Returns job-level metrics such as hardware utilization\ngiven `run_name`, `run_id`, `replica_num`, and `job_num`.\nIf only `run_name` is specified, returns metrics of `(replica_num=0, job_num=0)`\nof the latest run with the given name.\nBy default, returns one latest sample. To control time window/number of samples, use\n`limit`, `after`, `before`.\n\nSupported metrics (all optional):\n* `cpus_detected_num`\n* `cpu_usage_percent`\n* `memory_total_bytes`\n* `memory_usage_bytes`\n* `memory_working_set_bytes`\n* `gpus_detected_num`\n* `gpu_memory_total_bytes`\n* `gpu_memory_usage_bytes_gpu{i}`\n* `gpu_util_percent_gpu{i}`", "operationId": "get_job_metrics_api_project__project_name__metrics_job__run_name__get", "parameters": [{"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": false, "schema": {"type": "string", "format": "uuid", "title": "Run Id"}, "name": "run_id", "in": "query"}, {"required": false, "schema": {"type": "integer", "title": "Replica Num", "default": 0}, "name": "replica_num", "in": "query"}, {"required": false, "schema": {"type": "integer", "title": "Job Num", "default": 0}, "name": "job_num", "in": "query"}, {"required": false, "schema": {"type": "integer", "title": "Limit", "default": 1}, "name": "limit", "in": "query"}, {"required": false, "schema": {"type": "string", "format": "date-time", "title": "After"}, "name": "after", "in": "query"}, {"required": false, "schema": {"type": "string", "format": "date-time", "title": "Before"}, "name": "before", "in": "query"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/JobMetricsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/logs/poll": {"post": {"tags": ["logs"], "summary": "Poll Logs", "operationId": "poll_logs_api_project__project_name__logs_poll_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PollLogsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/JobSubmissionLogsRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/secrets/list": {"post": {"tags": ["secrets"], "summary": "List Secrets", "operationId": "list_secrets_api_project__project_name__secrets_list_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/SecretRequest"}, "type": "array", "title": "Response List Secrets Api Project Project Name Secrets List Post"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/secrets/get": {"post": {"tags": ["secrets"], "summary": "Get Secret", "operationId": "get_secret_api_project__project_name__secrets_get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetSecretRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SecretRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/secrets/create_or_update": {"post": {"tags": ["secrets"], "summary": "Create Or Update Secret", "operationId": "create_or_update_secret_api_project__project_name__secrets_create_or_update_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateOrUpdateSecretRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SecretRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/secrets/delete": {"post": {"tags": ["secrets"], "summary": "Delete Secrets", "operationId": "delete_secrets_api_project__project_name__secrets_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteSecretsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gateways/list": {"post": {"tags": ["gateways"], "summary": "List Gateways", "operationId": "list_gateways_api_project__project_name__gateways_list_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/GatewayRequest"}, "type": "array", "title": "Response List Gateways Api Project Project Name Gateways List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gateways/get": {"post": {"tags": ["gateways"], "summary": "Get Gateway", "operationId": "get_gateway_api_project__project_name__gateways_get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetGatewayRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GatewayRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gateways/create": {"post": {"tags": ["gateways"], "summary": "Create Gateway", "operationId": "create_gateway_api_project__project_name__gateways_create_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateGatewayRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GatewayRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gateways/delete": {"post": {"tags": ["gateways"], "summary": "Delete Gateways", "operationId": "delete_gateways_api_project__project_name__gateways_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteGatewaysRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gateways/set_default": {"post": {"tags": ["gateways"], "summary": "Set Default Gateway", "operationId": "set_default_gateway_api_project__project_name__gateways_set_default_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetDefaultGatewayRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/gateways/set_wildcard_domain": {"post": {"tags": ["gateways"], "summary": "Set Gateway Wildcard Domain", "operationId": "set_gateway_wildcard_domain_api_project__project_name__gateways_set_wildcard_domain_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetWildcardDomainRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GatewayRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/volumes/list": {"post": {"tags": ["volumes"], "summary": "List Volumes", "description": "Returns all volumes visible to user sorted by descending `created_at`.\n`project_name` and `only_active` can be specified as filters.\n\nThe results are paginated. To get the next page, pass `created_at` and `id` of\nthe last fleet from the previous page as `prev_created_at` and `prev_id`.", "operationId": "list_volumes_api_volumes_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListVolumesRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/VolumeRequest"}, "type": "array", "title": "Response List Volumes Api Volumes List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/volumes/list": {"post": {"tags": ["volumes"], "summary": "List Project Volumes", "description": "Returns all volumes in the project.", "operationId": "list_project_volumes_api_project__project_name__volumes_list_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/VolumeRequest"}, "type": "array", "title": "Response List Project Volumes Api Project Project Name Volumes List Post"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/volumes/get": {"post": {"tags": ["volumes"], "summary": "Get Volume", "description": "Returns a volume given a volume name.", "operationId": "get_volume_api_project__project_name__volumes_get_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetVolumeRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VolumeRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/volumes/create": {"post": {"tags": ["volumes"], "summary": "Create Volume", "description": "Creates a volume given a volume configuration.", "operationId": "create_volume_api_project__project_name__volumes_create_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateVolumeRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VolumeRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/project/{project_name}/volumes/delete": {"post": {"tags": ["volumes"], "summary": "Delete Volumes", "description": "Deletes one or more volumes.", "operationId": "delete_volumes_api_project__project_name__volumes_delete_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeleteVolumesRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/proxy/services/{project_name}/{run_name}": {"get": {"tags": ["service-proxy"], "summary": "Redirect To Service Root", "operationId": "redirect_to_service_root_proxy_services__project_name___run_name__get", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "put": {"tags": ["service-proxy"], "summary": "Redirect To Service Root", "operationId": "redirect_to_service_root_proxy_services__project_name___run_name__put", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "post": {"tags": ["service-proxy"], "summary": "Redirect To Service Root", "operationId": "redirect_to_service_root_proxy_services__project_name___run_name__post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "delete": {"tags": ["service-proxy"], "summary": "Redirect To Service Root", "operationId": "redirect_to_service_root_proxy_services__project_name___run_name__delete", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "head": {"tags": ["service-proxy"], "summary": "Redirect To Service Root", "operationId": "redirect_to_service_root_proxy_services__project_name___run_name__head", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "patch": {"tags": ["service-proxy"], "summary": "Redirect To Service Root", "operationId": "redirect_to_service_root_proxy_services__project_name___run_name__patch", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/proxy/services/{project_name}/{run_name}/{path}": {"get": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__get", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}, "put": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__put", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}, "post": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}, "delete": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__delete", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}, "options": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__options", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}, "head": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__head", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}, "patch": {"tags": ["service-proxy"], "summary": "Service Reverse Proxy", "operationId": "service_reverse_proxy_proxy_services__project_name___run_name___path__patch", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Run Name"}, "name": "run_name", "in": "path"}, {"required": true, "schema": {"type": "string", "title": "Path"}, "name": "path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/proxy/models/{project_name}/models": {"get": {"tags": ["model-proxy"], "summary": "Get Models", "operationId": "get_models_proxy_models__project_name__models_get", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ModelsResponseRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/proxy/models/{project_name}/chat/completions": {"post": {"tags": ["model-proxy"], "summary": "Post Chat Completions", "operationId": "post_chat_completions_proxy_models__project_name__chat_completions_post", "parameters": [{"required": true, "schema": {"type": "string", "title": "Project Name"}, "name": "project_name", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChatCompletionsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChatCompletionsResponseRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/metrics": {"get": {"tags": ["prometheus"], "summary": "Get Prometheus Metrics", "operationId": "get_prometheus_metrics_metrics_get", "responses": {"200": {"description": "Successful Response", "content": {"text/plain": {"schema": {"type": "string"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/files/get_archive_by_hash": {"post": {"tags": ["files"], "summary": "Get Archive By Hash", "operationId": "get_archive_by_hash_api_files_get_archive_by_hash_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetFileArchiveByHashRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FileArchiveRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/files/upload_archive": {"post": {"tags": ["files"], "summary": "Upload Archive", "operationId": "upload_archive_api_files_upload_archive_post", "requestBody": {"content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/Body_upload_archive_api_files_upload_archive_post"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FileArchiveRequest"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/api/events/list": {"post": {"tags": ["events"], "summary": "List Events", "description": "Returns events visible to the current user.\n\nRegular users can see events related to themselves and to projects they are members of.\nGlobal admins can see all events.\n\nThe results are paginated. To get the next page, pass `recorded_at` and `id` of\nthe last event from the previous page as `prev_recorded_at` and `prev_id`.", "operationId": "list_events_api_events_list_post", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ListEventsRequestRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/EventRequest"}, "type": "array", "title": "Response List Events Api Events List Post"}}}}, "400": {"description": "Bad request", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BadRequestErrorModelRequest"}}}}, "403": {"description": "Access denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessDeniedErrorModelRequest"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"HTTPBearer": []}]}}, "/healthcheck": {"get": {"summary": "Healthcheck", "operationId": "healthcheck_healthcheck_get", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}}}}}, "components": {"schemas": {"ACMGatewayCertificateRequest": {"properties": {"type": {"type": "string", "enum": ["acm"], "title": "Type", "description": "Certificates by AWS Certificate Manager (ACM)", "default": "acm"}, "arn": {"type": "string", "title": "Arn", "description": "The ARN of the wildcard ACM certificate for the domain"}}, "additionalProperties": false, "type": "object", "required": ["arn"], "title": "ACMGatewayCertificateRequest"}, "AWSAccessKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["access_key"], "title": "Type", "description": "The type of credentials", "default": "access_key"}, "access_key": {"type": "string", "title": "Access Key", "description": "The access key"}, "secret_key": {"type": "string", "title": "Secret Key", "description": "The secret key"}}, "additionalProperties": false, "type": "object", "required": ["access_key", "secret_key"], "title": "AWSAccessKeyCredsRequest"}, "AWSBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["aws"], "title": "Type", "description": "The type of the backend", "default": "aws"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of AWS regions. Omit to use all regions"}, "vpc_name": {"type": "string", "title": "Vpc Name", "description": "The name of custom VPCs. All configured regions must have a VPC with this name. If your custom VPCs don't have names or have different names in different regions, use `vpc_ids` instead."}, "vpc_ids": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Vpc Ids", "description": "The mapping from AWS regions to VPC IDs. If `default_vpcs: true`, omitted regions will use default VPCs"}, "default_vpcs": {"type": "boolean", "title": "Default Vpcs", "description": "A flag to enable/disable using default VPCs in regions not configured by `vpc_ids`. Set to `false` if default VPCs should never be used. Defaults to `true`"}, "public_ips": {"type": "boolean", "title": "Public Ips", "description": "A flag to enable/disable public IP assigning on instances. `public_ips: false` requires at least one private subnet with outbound internet connectivity provided by a NAT Gateway or a Transit Gateway. Defaults to `true`"}, "iam_instance_profile": {"type": "string", "title": "Iam Instance Profile", "description": "The name of the IAM instance profile to associate with EC2 instances. You can also specify the IAM role name for roles created via the AWS console. AWS automatically creates an instance profile and gives it the same name as the role"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags that will be assigned to resources created by `dstack`"}, "os_images": {"allOf": [{"$ref": "#/components/schemas/AWSOSImageConfigRequest"}], "title": "Os Images", "description": "The mapping of instance categories (CPU, NVIDIA GPU) to AMI configurations"}}, "additionalProperties": false, "type": "object", "title": "AWSBackendConfigRequest"}, "AWSBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["aws"], "title": "Type", "description": "The type of the backend", "default": "aws"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of AWS regions. Omit to use all regions"}, "vpc_name": {"type": "string", "title": "Vpc Name", "description": "The name of custom VPCs. All configured regions must have a VPC with this name. If your custom VPCs don't have names or have different names in different regions, use `vpc_ids` instead."}, "vpc_ids": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Vpc Ids", "description": "The mapping from AWS regions to VPC IDs. If `default_vpcs: true`, omitted regions will use default VPCs"}, "default_vpcs": {"type": "boolean", "title": "Default Vpcs", "description": "A flag to enable/disable using default VPCs in regions not configured by `vpc_ids`. Set to `false` if default VPCs should never be used. Defaults to `true`"}, "public_ips": {"type": "boolean", "title": "Public Ips", "description": "A flag to enable/disable public IP assigning on instances. `public_ips: false` requires at least one private subnet with outbound internet connectivity provided by a NAT Gateway or a Transit Gateway. Defaults to `true`"}, "iam_instance_profile": {"type": "string", "title": "Iam Instance Profile", "description": "The name of the IAM instance profile to associate with EC2 instances. You can also specify the IAM role name for roles created via the AWS console. AWS automatically creates an instance profile and gives it the same name as the role"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags that will be assigned to resources created by `dstack`"}, "os_images": {"allOf": [{"$ref": "#/components/schemas/AWSOSImageConfigRequest"}], "title": "Os Images", "description": "The mapping of instance categories (CPU, NVIDIA GPU) to AMI configurations"}, "creds": {"oneOf": [{"$ref": "#/components/schemas/AWSAccessKeyCredsRequest"}, {"$ref": "#/components/schemas/AWSDefaultCredsRequest"}], "title": "Creds", "description": "The credentials", "discriminator": {"propertyName": "type", "mapping": {"access_key": "#/components/schemas/AWSAccessKeyCredsRequest", "default": "#/components/schemas/AWSDefaultCredsRequest"}}}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "AWSBackendConfigWithCredsRequest"}, "AWSDefaultCredsRequest": {"properties": {"type": {"type": "string", "enum": ["default"], "title": "Type", "description": "The type of credentials", "default": "default"}}, "additionalProperties": false, "type": "object", "title": "AWSDefaultCredsRequest"}, "AWSOSImageConfigRequest": {"properties": {"cpu": {"allOf": [{"$ref": "#/components/schemas/AWSOSImageRequest"}], "title": "Cpu", "description": "The AMI used for CPU instances"}, "nvidia": {"allOf": [{"$ref": "#/components/schemas/AWSOSImageRequest"}], "title": "Nvidia", "description": "The AMI used for NVIDIA GPU instances"}}, "additionalProperties": false, "type": "object", "title": "AWSOSImageConfigRequest"}, "AWSOSImageRequest": {"properties": {"name": {"type": "string", "title": "Name", "description": "The AMI name"}, "owner": {"type": "string", "pattern": "^(\\d{12}|self)$", "title": "Owner", "description": "The AMI owner, account ID or `self`", "default": "self"}, "user": {"type": "string", "title": "User", "description": "The OS user for provisioning"}}, "additionalProperties": false, "type": "object", "required": ["name", "user"], "title": "AWSOSImageRequest"}, "AcceleratorVendor": {"type": "string", "enum": ["nvidia", "amd", "google", "intel", "tenstorrent"], "title": "AcceleratorVendor", "description": "An enumeration."}, "AccessDeniedDetailsModelRequest": {"properties": {"code": {"type": "string", "title": "Code"}, "msg": {"type": "string", "title": "Msg", "default": "Access denied"}}, "additionalProperties": false, "type": "object", "title": "AccessDeniedDetailsModelRequest"}, "AccessDeniedErrorModelRequest": {"properties": {"detail": {"$ref": "#/components/schemas/AccessDeniedDetailsModelRequest"}}, "additionalProperties": false, "type": "object", "required": ["detail"], "title": "AccessDeniedErrorModelRequest"}, "AddProjectMemberRequestRequest": {"properties": {"members": {"items": {"$ref": "#/components/schemas/MemberSettingRequest"}, "type": "array", "title": "Members"}}, "additionalProperties": false, "type": "object", "required": ["members"], "title": "AddProjectMemberRequestRequest"}, "AppSpecRequest": {"properties": {"port": {"type": "integer", "title": "Port"}, "map_to_port": {"type": "integer", "title": "Map To Port"}, "app_name": {"type": "string", "title": "App Name"}, "url_path": {"type": "string", "title": "Url Path"}, "url_query_params": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Url Query Params"}}, "additionalProperties": false, "type": "object", "required": ["port", "app_name"], "title": "AppSpecRequest"}, "ApplyAction": {"type": "string", "enum": ["create", "update"], "title": "ApplyAction", "description": "An enumeration."}, "ApplyFleetPlanInputRequest": {"properties": {"spec": {"$ref": "#/components/schemas/FleetSpecRequest"}, "current_resource": {"allOf": [{"$ref": "#/components/schemas/FleetRequest"}], "title": "Current Resource", "description": "The expected current resource. If the resource has changed, the apply fails unless `force: true`."}}, "additionalProperties": false, "type": "object", "required": ["spec"], "title": "ApplyFleetPlanInputRequest"}, "ApplyFleetPlanRequestRequest": {"properties": {"plan": {"$ref": "#/components/schemas/ApplyFleetPlanInputRequest"}, "force": {"type": "boolean", "title": "Force", "description": "Use `force: true` to apply even if the expected resource does not match."}}, "additionalProperties": false, "type": "object", "required": ["plan", "force"], "title": "ApplyFleetPlanRequestRequest"}, "ApplyRunPlanInputRequest": {"properties": {"run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}, "current_resource": {"allOf": [{"$ref": "#/components/schemas/RunRequest"}], "title": "Current Resource", "description": "The expected current resource. If the resource has changed, the apply fails unless `force: true`."}}, "additionalProperties": false, "type": "object", "required": ["run_spec"], "title": "ApplyRunPlanInputRequest"}, "ApplyRunPlanRequestRequest": {"properties": {"plan": {"$ref": "#/components/schemas/ApplyRunPlanInputRequest"}, "force": {"type": "boolean", "title": "Force", "description": "Use `force: true` to apply even if the expected resource does not match."}}, "additionalProperties": false, "type": "object", "required": ["plan", "force"], "title": "ApplyRunPlanRequestRequest"}, "AzureBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["azure"], "title": "Type", "description": "The type of the backend", "default": "azure"}, "tenant_id": {"type": "string", "title": "Tenant Id", "description": "The tenant ID"}, "subscription_id": {"type": "string", "title": "Subscription Id", "description": "The subscription ID"}, "resource_group": {"type": "string", "title": "Resource Group", "description": "The resource group for resources created by `dstack`. If not specified, `dstack` will create a new resource group"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Azure regions (locations). Omit to use all regions"}, "vpc_ids": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Vpc Ids", "description": "The mapping from configured Azure locations to network IDs. A network ID must have a format `networkResourceGroup/networkName` If not specified, `dstack` will create a new network for every configured region"}, "public_ips": {"type": "boolean", "title": "Public Ips", "description": "A flag to enable/disable public IP assigning on instances. `public_ips: false` requires `vpc_ids` that specifies custom networks with outbound internet connectivity provided by NAT Gateway or other mechanism. Defaults to `true`"}, "vm_managed_identity": {"type": "string", "title": "Vm Managed Identity", "description": "The managed identity to associate with provisioned VMs. Must have a format `managedIdentityResourceGroup/managedIdentityName`"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags that will be assigned to resources created by `dstack`"}}, "additionalProperties": false, "type": "object", "required": ["tenant_id", "subscription_id"], "title": "AzureBackendConfigRequest"}, "AzureBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["azure"], "title": "Type", "description": "The type of the backend", "default": "azure"}, "tenant_id": {"type": "string", "title": "Tenant Id", "description": "The tenant ID"}, "subscription_id": {"type": "string", "title": "Subscription Id", "description": "The subscription ID"}, "resource_group": {"type": "string", "title": "Resource Group", "description": "The resource group for resources created by `dstack`. If not specified, `dstack` will create a new resource group"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Azure regions (locations). Omit to use all regions"}, "vpc_ids": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Vpc Ids", "description": "The mapping from configured Azure locations to network IDs. A network ID must have a format `networkResourceGroup/networkName` If not specified, `dstack` will create a new network for every configured region"}, "public_ips": {"type": "boolean", "title": "Public Ips", "description": "A flag to enable/disable public IP assigning on instances. `public_ips: false` requires `vpc_ids` that specifies custom networks with outbound internet connectivity provided by NAT Gateway or other mechanism. Defaults to `true`"}, "vm_managed_identity": {"type": "string", "title": "Vm Managed Identity", "description": "The managed identity to associate with provisioned VMs. Must have a format `managedIdentityResourceGroup/managedIdentityName`"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags that will be assigned to resources created by `dstack`"}, "creds": {"oneOf": [{"$ref": "#/components/schemas/AzureClientCredsRequest"}, {"$ref": "#/components/schemas/AzureDefaultCredsRequest"}], "title": "Creds", "description": "The credentials", "discriminator": {"propertyName": "type", "mapping": {"client": "#/components/schemas/AzureClientCredsRequest", "default": "#/components/schemas/AzureDefaultCredsRequest"}}}}, "additionalProperties": false, "type": "object", "required": ["tenant_id", "subscription_id", "creds"], "title": "AzureBackendConfigWithCredsRequest"}, "AzureClientCredsRequest": {"properties": {"type": {"type": "string", "enum": ["client"], "title": "Type", "description": "The type of credentials", "default": "client"}, "client_id": {"type": "string", "title": "Client Id", "description": "The client ID"}, "client_secret": {"type": "string", "title": "Client Secret", "description": "The client secret"}, "tenant_id": {"type": "string", "title": "Tenant Id"}}, "additionalProperties": false, "type": "object", "required": ["client_id", "client_secret"], "title": "AzureClientCredsRequest"}, "AzureDefaultCredsRequest": {"properties": {"type": {"type": "string", "enum": ["default"], "title": "Type", "description": "The type of credentials", "default": "default"}}, "additionalProperties": false, "type": "object", "title": "AzureDefaultCredsRequest"}, "BackendInfoRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "config": {"anyOf": [{"$ref": "#/components/schemas/AWSBackendConfigRequest"}, {"$ref": "#/components/schemas/AzureBackendConfigRequest"}, {"$ref": "#/components/schemas/CloudRiftBackendConfigRequest"}, {"$ref": "#/components/schemas/CudoBackendConfigRequest"}, {"$ref": "#/components/schemas/BaseDigitalOceanBackendConfigRequest"}, {"$ref": "#/components/schemas/GCPBackendConfigRequest"}, {"$ref": "#/components/schemas/HotAisleBackendConfigRequest"}, {"$ref": "#/components/schemas/KubernetesBackendConfigRequest"}, {"$ref": "#/components/schemas/LambdaBackendConfigRequest"}, {"$ref": "#/components/schemas/NebiusBackendConfigRequest"}, {"$ref": "#/components/schemas/OCIBackendConfigRequest"}, {"$ref": "#/components/schemas/RunpodBackendConfigRequest"}, {"$ref": "#/components/schemas/TensorDockBackendConfigRequest"}, {"$ref": "#/components/schemas/VastAIBackendConfigRequest"}, {"$ref": "#/components/schemas/VerdaBackendConfigRequest"}, {"$ref": "#/components/schemas/VultrBackendConfigRequest"}, {"$ref": "#/components/schemas/DstackBackendConfigRequest"}, {"$ref": "#/components/schemas/DstackBaseBackendConfigRequest"}], "title": "Config"}}, "additionalProperties": false, "type": "object", "required": ["name", "config"], "title": "BackendInfoRequest"}, "BackendInfoYAMLRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "config_yaml": {"type": "string", "title": "Config Yaml"}}, "additionalProperties": false, "type": "object", "required": ["name", "config_yaml"], "title": "BackendInfoYAMLRequest"}, "BackendType": {"type": "string", "enum": ["amddevcloud", "aws", "azure", "cloudrift", "cudo", "datacrunch", "digitalocean", "dstack", "gcp", "hotaisle", "kubernetes", "lambda", "local", "remote", "nebius", "oci", "runpod", "tensordock", "vastai", "verda", "vultr"], "title": "BackendType", "description": "Attributes:\n AMDDEVCLOUD (BackendType): AMD Developer Cloud\n AWS (BackendType): Amazon Web Services\n AZURE (BackendType): Microsoft Azure\n CLOUDRIFT (BackendType): CloudRift\n CUDO (BackendType): Cudo\n DATACRUNCH (BackendType): DataCrunch (for backward compatibility)\n DIGITALOCEAN (BackendType): DigitalOcean\n DSTACK (BackendType): dstack Sky\n GCP (BackendType): Google Cloud Platform\n HOTAISLE (BackendType): Hot Aisle\n KUBERNETES (BackendType): Kubernetes\n LAMBDA (BackendType): Lambda Cloud\n NEBIUS (BackendType): Nebius AI Cloud\n OCI (BackendType): Oracle Cloud Infrastructure\n RUNPOD (BackendType): Runpod Cloud\n TENSORDOCK (BackendType): TensorDock Marketplace\n VASTAI (BackendType): Vast.ai Marketplace\n VERDA (BackendType): Verda Cloud\n VULTR (BackendType): Vultr"}, "BadRequestDetailsModelRequest": {"properties": {"code": {"allOf": [{"$ref": "#/components/schemas/ServerClientErrorCode"}], "default": "error"}, "msg": {"type": "string", "title": "Msg"}}, "additionalProperties": false, "type": "object", "required": ["msg"], "title": "BadRequestDetailsModelRequest"}, "BadRequestErrorModelRequest": {"properties": {"detail": {"$ref": "#/components/schemas/BadRequestDetailsModelRequest"}}, "additionalProperties": false, "type": "object", "required": ["detail"], "title": "BadRequestErrorModelRequest"}, "BaseDigitalOceanAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "BaseDigitalOceanAPIKeyCredsRequest"}, "BaseDigitalOceanBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["amddevcloud", "digitalocean"], "title": "Type", "description": "The type of backend"}, "project_name": {"type": "string", "title": "Project Name", "description": "The name of the project"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "required": ["type"], "title": "BaseDigitalOceanBackendConfigRequest"}, "BaseDigitalOceanBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["amddevcloud", "digitalocean"], "title": "Type", "description": "The type of backend"}, "project_name": {"type": "string", "title": "Project Name", "description": "The name of the project"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/BaseDigitalOceanAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["type", "creds"], "title": "BaseDigitalOceanBackendConfigWithCredsRequest"}, "Body_upload_archive_api_files_upload_archive_post": {"properties": {"file": {"type": "string", "format": "binary", "title": "File"}}, "type": "object", "required": ["file"], "title": "Body_upload_archive_api_files_upload_archive_post"}, "Body_upload_code_api_project__project_name__repos_upload_code_post": {"properties": {"file": {"type": "string", "format": "binary", "title": "File"}}, "type": "object", "required": ["file"], "title": "Body_upload_code_api_project__project_name__repos_upload_code_post"}, "CPUArchitecture": {"type": "string", "enum": ["x86", "arm"], "title": "CPUArchitecture", "description": "An enumeration."}, "CPUSpecRequest": {"properties": {"arch": {"allOf": [{"$ref": "#/components/schemas/CPUArchitecture"}], "description": "The CPU architecture, one of: `x86`, `arm`"}, "count": {"anyOf": [{"$ref": "#/components/schemas/Range_int_"}, {"type": "integer"}, {"type": "string"}], "title": "Count", "description": "The number of CPU cores", "default": {"min": 2}}}, "additionalProperties": false, "type": "object", "title": "CPUSpecRequest"}, "ChatCompletionsChoiceRequest": {"properties": {"finish_reason": {"type": "string", "title": "Finish Reason"}, "index": {"type": "integer", "title": "Index"}, "message": {"$ref": "#/components/schemas/ChatMessageRequest"}}, "additionalProperties": false, "type": "object", "required": ["finish_reason", "index", "message"], "title": "ChatCompletionsChoiceRequest"}, "ChatCompletionsRequestRequest": {"properties": {"messages": {"items": {"$ref": "#/components/schemas/ChatMessageRequest"}, "type": "array", "title": "Messages"}, "model": {"type": "string", "title": "Model"}, "frequency_penalty": {"type": "number", "title": "Frequency Penalty", "default": 0.0}, "logit_bias": {"additionalProperties": {"type": "number"}, "type": "object", "title": "Logit Bias", "default": {}}, "max_tokens": {"type": "integer", "title": "Max Tokens"}, "n": {"type": "integer", "title": "N", "default": 1}, "presence_penalty": {"type": "number", "title": "Presence Penalty", "default": 0.0}, "response_format": {"type": "object", "title": "Response Format"}, "seed": {"type": "integer", "title": "Seed"}, "stop": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "string"}], "title": "Stop"}, "stream": {"type": "boolean", "title": "Stream", "default": false}, "temperature": {"type": "number", "title": "Temperature", "default": 1.0}, "top_p": {"type": "number", "title": "Top P", "default": 1.0}, "tools": {"items": {}, "type": "array", "title": "Tools", "default": []}, "tool_choice": {"anyOf": [{"type": "string", "enum": ["none", "auto"]}, {"type": "object"}], "title": "Tool Choice", "default": {}}, "user": {"type": "string", "title": "User"}}, "additionalProperties": false, "type": "object", "required": ["messages", "model"], "title": "ChatCompletionsRequestRequest"}, "ChatCompletionsResponseRequest": {"properties": {"id": {"type": "string", "title": "Id"}, "choices": {"items": {"$ref": "#/components/schemas/ChatCompletionsChoiceRequest"}, "type": "array", "title": "Choices"}, "created": {"type": "integer", "title": "Created"}, "model": {"type": "string", "title": "Model"}, "system_fingerprint": {"type": "string", "title": "System Fingerprint", "default": ""}, "object": {"type": "string", "enum": ["chat.completion"], "title": "Object", "default": "chat.completion"}, "usage": {"$ref": "#/components/schemas/ChatCompletionsUsageRequest"}}, "additionalProperties": false, "type": "object", "required": ["id", "choices", "created", "model", "usage"], "title": "ChatCompletionsResponseRequest"}, "ChatCompletionsUsageRequest": {"properties": {"completion_tokens": {"type": "integer", "title": "Completion Tokens"}, "prompt_tokens": {"type": "integer", "title": "Prompt Tokens"}, "total_tokens": {"type": "integer", "title": "Total Tokens"}}, "additionalProperties": false, "type": "object", "required": ["completion_tokens", "prompt_tokens", "total_tokens"], "title": "ChatCompletionsUsageRequest"}, "ChatMessageRequest": {"properties": {"role": {"type": "string", "title": "Role"}, "content": {"type": "string", "title": "Content"}}, "additionalProperties": false, "type": "object", "required": ["role", "content"], "title": "ChatMessageRequest"}, "CloudRiftAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "CloudRiftAPIKeyCredsRequest"}, "CloudRiftBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["cloudrift"], "title": "Type", "description": "The type of backend", "default": "cloudrift"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of CloudRift regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "title": "CloudRiftBackendConfigRequest"}, "CloudRiftBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["cloudrift"], "title": "Type", "description": "The type of backend", "default": "cloudrift"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of CloudRift regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/CloudRiftAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "CloudRiftBackendConfigWithCredsRequest"}, "CreateBackendYAMLRequestRequest": {"properties": {"config_yaml": {"type": "string", "title": "Config Yaml"}}, "additionalProperties": false, "type": "object", "required": ["config_yaml"], "title": "CreateBackendYAMLRequestRequest"}, "CreateFleetRequestRequest": {"properties": {"spec": {"$ref": "#/components/schemas/FleetSpecRequest"}}, "additionalProperties": false, "type": "object", "required": ["spec"], "title": "CreateFleetRequestRequest"}, "CreateGatewayRequestRequest": {"properties": {"configuration": {"$ref": "#/components/schemas/GatewayConfigurationRequest"}}, "additionalProperties": false, "type": "object", "required": ["configuration"], "title": "CreateGatewayRequestRequest"}, "CreateOrUpdateSecretRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "value": {"type": "string", "title": "Value"}}, "additionalProperties": false, "type": "object", "required": ["name", "value"], "title": "CreateOrUpdateSecretRequestRequest"}, "CreateProjectRequestRequest": {"properties": {"project_name": {"type": "string", "title": "Project Name"}, "is_public": {"type": "boolean", "title": "Is Public", "default": false}}, "additionalProperties": false, "type": "object", "required": ["project_name"], "title": "CreateProjectRequestRequest"}, "CreateUserRequestRequest": {"properties": {"username": {"type": "string", "title": "Username"}, "global_role": {"$ref": "#/components/schemas/GlobalRole"}, "email": {"type": "string", "title": "Email"}, "active": {"type": "boolean", "title": "Active", "default": true}}, "additionalProperties": false, "type": "object", "required": ["username", "global_role"], "title": "CreateUserRequestRequest"}, "CreateVolumeRequestRequest": {"properties": {"configuration": {"$ref": "#/components/schemas/VolumeConfigurationRequest"}}, "additionalProperties": false, "type": "object", "required": ["configuration"], "title": "CreateVolumeRequestRequest"}, "CreationPolicy": {"type": "string", "enum": ["reuse", "reuse-or-create"], "title": "CreationPolicy", "description": "An enumeration."}, "CudoAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "CudoAPIKeyCredsRequest"}, "CudoBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["cudo"], "title": "Type", "description": "The type of backend", "default": "cudo"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Cudo regions. Omit to use all regions"}, "project_id": {"type": "string", "title": "Project Id", "description": "The project ID"}}, "additionalProperties": false, "type": "object", "required": ["project_id"], "title": "CudoBackendConfigRequest"}, "CudoBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["cudo"], "title": "Type", "description": "The type of backend", "default": "cudo"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Cudo regions. Omit to use all regions"}, "project_id": {"type": "string", "title": "Project Id", "description": "The project ID"}, "creds": {"allOf": [{"$ref": "#/components/schemas/CudoAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["project_id", "creds"], "title": "CudoBackendConfigWithCredsRequest"}, "DeleteBackendsRequestRequest": {"properties": {"backends_names": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array"}}, "additionalProperties": false, "type": "object", "required": ["backends_names"], "title": "DeleteBackendsRequestRequest"}, "DeleteFleetInstancesRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "instance_nums": {"items": {"type": "integer"}, "type": "array", "title": "Instance Nums"}}, "additionalProperties": false, "type": "object", "required": ["name", "instance_nums"], "title": "DeleteFleetInstancesRequestRequest"}, "DeleteFleetsRequestRequest": {"properties": {"names": {"items": {"type": "string"}, "type": "array", "title": "Names"}}, "additionalProperties": false, "type": "object", "required": ["names"], "title": "DeleteFleetsRequestRequest"}, "DeleteGatewaysRequestRequest": {"properties": {"names": {"items": {"type": "string"}, "type": "array", "title": "Names"}}, "additionalProperties": false, "type": "object", "required": ["names"], "title": "DeleteGatewaysRequestRequest"}, "DeleteProjectsRequestRequest": {"properties": {"projects_names": {"items": {"type": "string"}, "type": "array", "title": "Projects Names"}}, "additionalProperties": false, "type": "object", "required": ["projects_names"], "title": "DeleteProjectsRequestRequest"}, "DeleteReposRequestRequest": {"properties": {"repos_ids": {"items": {"type": "string"}, "type": "array", "title": "Repos Ids"}}, "additionalProperties": false, "type": "object", "required": ["repos_ids"], "title": "DeleteReposRequestRequest"}, "DeleteRunsRequestRequest": {"properties": {"runs_names": {"items": {"type": "string"}, "type": "array", "title": "Runs Names"}}, "additionalProperties": false, "type": "object", "required": ["runs_names"], "title": "DeleteRunsRequestRequest"}, "DeleteSecretsRequestRequest": {"properties": {"secrets_names": {"items": {"type": "string"}, "type": "array", "title": "Secrets Names"}}, "additionalProperties": false, "type": "object", "required": ["secrets_names"], "title": "DeleteSecretsRequestRequest"}, "DeleteUsersRequestRequest": {"properties": {"users": {"items": {"type": "string"}, "type": "array", "title": "Users"}}, "additionalProperties": false, "type": "object", "required": ["users"], "title": "DeleteUsersRequestRequest"}, "DeleteVolumesRequestRequest": {"properties": {"names": {"items": {"type": "string"}, "type": "array", "title": "Names"}}, "additionalProperties": false, "type": "object", "required": ["names"], "title": "DeleteVolumesRequestRequest"}, "DevEnvironmentConfigurationRequest": {"properties": {"ide": {"anyOf": [{"type": "string", "enum": ["vscode"]}, {"type": "string", "enum": ["cursor"]}, {"type": "string", "enum": ["windsurf"]}], "title": "Ide", "description": "The IDE to run. Supported values include `vscode`, `cursor`, and `windsurf`"}, "version": {"type": "string", "title": "Version", "description": "The version of the IDE. For `windsurf`, the version is in the format `version@commit`"}, "init": {"items": {"type": "string"}, "type": "array", "title": "Init", "description": "The shell commands to run on startup", "default": []}, "inactivity_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Inactivity Duration", "description": "The maximum amount of time the dev environment can be inactive (e.g., `2h`, `1d`, etc). After it elapses, the dev environment is automatically stopped. Inactivity is defined as the absence of SSH connections to the dev environment, including VS Code connections, `ssh ` shells, and attached `dstack apply` or `dstack attach` commands. Use `off` for unlimited duration. Can be updated in-place. Defaults to `off`"}, "ports": {"items": {"anyOf": [{"type": "integer", "maximum": 65536.0, "exclusiveMinimum": 0.0}, {"type": "string", "pattern": "^(?:[0-9]+|\\*):[0-9]+$"}, {"$ref": "#/components/schemas/PortMappingRequest"}]}, "type": "array", "title": "Ports", "description": "Port numbers/mapping to expose", "default": []}, "type": {"type": "string", "enum": ["dev-environment"], "title": "Type", "default": "dev-environment"}, "name": {"type": "string", "title": "Name", "description": "The run name. If not specified, a random name is generated"}, "image": {"type": "string", "title": "Image", "description": "The name of the Docker image to run"}, "user": {"type": "string", "title": "User", "description": "The user inside the container, `user_name_or_id[:group_name_or_id]` (e.g., `ubuntu`, `1000:1000`). Defaults to the default user from the `image`"}, "privileged": {"type": "boolean", "title": "Privileged", "description": "Run the container in privileged mode", "default": false}, "entrypoint": {"type": "string", "title": "Entrypoint", "description": "The Docker entrypoint"}, "working_dir": {"type": "string", "title": "Working Dir", "description": "The absolute path to the working directory inside the container. Defaults to the `image`'s default working directory"}, "home_dir": {"type": "string", "title": "Home Dir", "default": "/root"}, "registry_auth": {"allOf": [{"$ref": "#/components/schemas/RegistryAuthRequest"}], "title": "Registry Auth", "description": "Credentials for pulling a private Docker image"}, "python": {"allOf": [{"$ref": "#/components/schemas/PythonVersion"}], "description": "The major version of Python. Mutually exclusive with `image` and `docker`"}, "nvcc": {"type": "boolean", "title": "Nvcc", "description": "Use image with NVIDIA CUDA Compiler (NVCC) included. Mutually exclusive with `image` and `docker`"}, "single_branch": {"type": "boolean", "title": "Single Branch", "description": "Whether to clone and track only the current branch or all remote branches. Relevant only when using remote Git repos. Defaults to `false` for dev environments and to `true` for tasks and services"}, "env": {"allOf": [{"$ref": "#/components/schemas/Env"}], "title": "Env", "description": "The mapping or the list of environment variables", "default": {"__root__": {}}}, "shell": {"type": "string", "title": "Shell", "description": "The shell used to run commands. Allowed values are `sh`, `bash`, or an absolute path, e.g., `/usr/bin/zsh`. Defaults to `/bin/sh` if the `image` is specified, `/bin/bash` otherwise"}, "resources": {"allOf": [{"$ref": "#/components/schemas/ResourcesSpecRequest"}], "title": "Resources", "description": "The resources requirements to run the configuration", "default": {"cpu": {"min": 2}, "memory": {"min": 8.0}, "disk": {"size": {"min": 100.0}}}}, "priority": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Priority", "description": "The priority of the run, an integer between `0` and `100`. `dstack` tries to provision runs with higher priority first. Defaults to `0`"}, "volumes": {"items": {"anyOf": [{"$ref": "#/components/schemas/VolumeMountPointRequest"}, {"$ref": "#/components/schemas/InstanceMountPointRequest"}, {"type": "string"}]}, "type": "array", "title": "Volumes", "description": "The volumes mount points", "default": []}, "docker": {"type": "boolean", "title": "Docker", "description": "Use Docker inside the container. Mutually exclusive with `image`, `python`, and `nvcc`. Overrides `privileged`"}, "repos": {"items": {"$ref": "#/components/schemas/RepoSpecRequest"}, "type": "array", "title": "Repos", "description": "The list of Git repos", "default": []}, "files": {"items": {"anyOf": [{"$ref": "#/components/schemas/FilePathMappingRequest"}, {"type": "string"}]}, "type": "array", "title": "Files", "description": "The local to container file path mappings", "default": []}, "setup": {"items": {"type": "string"}, "type": "array", "title": "Setup", "default": []}, "backends": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array", "description": "The backends to consider for provisioning (e.g., `[aws, gcp]`)"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The regions to consider for provisioning (e.g., `[eu-west-1, us-west4, westeurope]`)"}, "availability_zones": {"items": {"type": "string"}, "type": "array", "title": "Availability Zones", "description": "The availability zones to consider for provisioning (e.g., `[eu-west-1a, us-west4-a]`)"}, "instance_types": {"items": {"type": "string"}, "type": "array", "title": "Instance Types", "description": "The cloud-specific instance types to consider for provisioning (e.g., `[p3.8xlarge, n1-standard-4]`)"}, "reservation": {"type": "string", "title": "Reservation", "description": "The existing reservation to use for instance provisioning. Supports AWS Capacity Reservations, AWS Capacity Blocks, and GCP reservations"}, "spot_policy": {"allOf": [{"$ref": "#/components/schemas/SpotPolicy"}], "description": "The policy for provisioning spot or on-demand instances: `spot`, `on-demand`, `auto`. Defaults to `on-demand`"}, "retry": {"anyOf": [{"$ref": "#/components/schemas/ProfileRetryRequest"}, {"type": "boolean"}], "title": "Retry", "description": "The policy for resubmitting the run. Defaults to `false`"}, "max_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Max Duration", "description": "The maximum duration of a run (e.g., `2h`, `1d`, etc) in a running state, excluding provisioning and pulling. After it elapses, the run is automatically stopped. Use `off` for unlimited duration. Defaults to `off`"}, "stop_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Stop Duration", "description": "The maximum duration of a run graceful stopping. After it elapses, the run is automatically forced stopped. This includes force detaching volumes used by the run. Use `off` for unlimited duration. Defaults to `5m`"}, "max_price": {"type": "number", "exclusiveMinimum": 0.0, "title": "Max Price", "description": "The maximum instance price per hour, in dollars"}, "creation_policy": {"allOf": [{"$ref": "#/components/schemas/CreationPolicy"}], "description": "The policy for using instances from fleets: `reuse`, `reuse-or-create`. Defaults to `reuse-or-create`"}, "idle_duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Idle Duration", "description": "Time to wait before terminating idle instances. Instances are not terminated if the fleet is already at `nodes.min`. Defaults to `5m` for runs and `3d` for fleets. Use `off` for unlimited duration"}, "utilization_policy": {"allOf": [{"$ref": "#/components/schemas/UtilizationPolicyRequest"}], "title": "Utilization Policy", "description": "Run termination policy based on utilization"}, "startup_order": {"allOf": [{"$ref": "#/components/schemas/StartupOrder"}], "description": "The order in which master and workers jobs are started: `any`, `master-first`, `workers-first`. Defaults to `any`"}, "stop_criteria": {"allOf": [{"$ref": "#/components/schemas/StopCriteria"}], "description": "The criteria determining when a multi-node run should be considered finished: `all-done`, `master-done`. Defaults to `all-done`"}, "schedule": {"allOf": [{"$ref": "#/components/schemas/ScheduleRequest"}], "title": "Schedule", "description": "The schedule for starting the run at specified time"}, "fleets": {"items": {"type": "string"}, "type": "array", "title": "Fleets", "description": "The fleets considered for reuse"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the resource. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}}, "additionalProperties": false, "type": "object", "required": ["ide"], "title": "DevEnvironmentConfigurationRequest"}, "DiskRequest": {"properties": {"size_mib": {"type": "integer", "title": "Size Mib"}}, "additionalProperties": false, "type": "object", "required": ["size_mib"], "title": "DiskRequest"}, "DiskSpecRequest": {"properties": {"size": {"anyOf": [{"$ref": "#/components/schemas/Range_Memory_"}, {"type": "integer"}, {"type": "string"}], "title": "Size", "description": "Disk size"}}, "additionalProperties": false, "type": "object", "required": ["size"], "title": "DiskSpecRequest"}, "DstackBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["dstack"], "title": "Type", "default": "dstack"}, "base_backends": {"items": {"type": "string"}, "type": "array", "title": "Base Backends"}}, "additionalProperties": false, "type": "object", "required": ["base_backends"], "title": "DstackBackendConfigRequest", "description": "This is a config model of DstackBackend stored in BackendModel.config and used by DstackConfigurator."}, "DstackBaseBackendConfigRequest": {"properties": {"type": {"type": "string", "title": "Type"}}, "additionalProperties": false, "type": "object", "required": ["type"], "title": "DstackBaseBackendConfigRequest"}, "Env": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"additionalProperties": {"anyOf": [{"type": "string"}, {"$ref": "#/components/schemas/EnvSentinelRequest"}]}, "type": "object"}], "title": "Env", "description": "Env represents a mapping of process environment variables, as in environ(7).\nEnvironment values may be omitted, in that case the :class:`EnvSentinel`\nobject is used as a placeholder.\n\nTo create an instance from a `dict[str, str]` or a `list[str]` use pydantic's\n:meth:`BaseModel.parse_obj(dict | list)` method.\n\nNB: this is *NOT* a CoreModel, pydantic-duality, which is used as a base\nfor the CoreModel, doesn't play well with custom root models.", "default": {}}, "EnvSentinelRequest": {"properties": {"key": {"type": "string", "title": "Key"}}, "additionalProperties": false, "type": "object", "required": ["key"], "title": "EnvSentinelRequest"}, "EventRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "message": {"type": "string", "title": "Message"}, "recorded_at": {"type": "string", "format": "date-time", "title": "Recorded At"}, "actor_user_id": {"type": "string", "format": "uuid", "title": "Actor User Id", "description": "ID of the user who performed the action that triggered the event, or `null` if the action was performed by the system"}, "actor_user": {"type": "string", "title": "Actor User", "description": "Name of the user who performed the action that triggered the event, or `null` if the action was performed by the system"}, "is_actor_user_deleted": {"type": "boolean", "title": "Is Actor User Deleted", "description": "Whether the user who performed the action that triggered the event is deleted, or `null` if the action was performed by the system"}, "targets": {"items": {"$ref": "#/components/schemas/EventTargetRequest"}, "type": "array", "title": "Targets", "description": "List of entities affected by the event"}}, "additionalProperties": false, "type": "object", "required": ["id", "message", "recorded_at", "targets"], "title": "EventRequest"}, "EventTargetRequest": {"properties": {"type": {"type": "string", "title": "Type", "description": "Type of the target entity. One of: `project`, `user`, `fleet`, `instance`, `run`, `job`, `volume`, `gateway`, `secret`"}, "project_id": {"type": "string", "format": "uuid", "title": "Project Id", "description": "ID of the project the target entity belongs to, or `null` for target types not bound to a project (e.g., users)"}, "project_name": {"type": "string", "title": "Project Name", "description": "Name of the project the target entity belongs to, or `null` for target types not bound to a project (e.g., users)"}, "is_project_deleted": {"type": "boolean", "title": "Is Project Deleted", "description": "Whether the project the target entity belongs to is deleted, or `null` for target types not bound to a project (e.g., users)"}, "id": {"type": "string", "format": "uuid", "title": "Id", "description": "ID of the target entity"}, "name": {"type": "string", "title": "Name", "description": "Name of the target entity"}}, "additionalProperties": false, "type": "object", "required": ["type", "id", "name"], "title": "EventTargetRequest"}, "EventTargetType": {"type": "string", "enum": ["project", "user", "fleet", "instance", "run", "job", "volume", "gateway", "secret"], "title": "EventTargetType", "description": "An enumeration."}, "FileArchiveMappingRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id", "description": "The File archive ID"}, "path": {"type": "string", "title": "Path", "description": "The path in the container"}}, "additionalProperties": false, "type": "object", "required": ["id", "path"], "title": "FileArchiveMappingRequest"}, "FileArchiveRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "hash": {"type": "string", "title": "Hash"}}, "additionalProperties": false, "type": "object", "required": ["id", "hash"], "title": "FileArchiveRequest"}, "FilePathMappingRequest": {"properties": {"local_path": {"type": "string", "title": "Local Path", "description": "The path on the user's machine. Relative paths are resolved relative to the parent directory of the the configuration file"}, "path": {"type": "string", "title": "Path", "description": "The path in the container. Relative paths are resolved relative to the working directory"}}, "additionalProperties": false, "type": "object", "required": ["local_path", "path"], "title": "FilePathMappingRequest"}, "FleetConfigurationRequest": {"properties": {"type": {"type": "string", "enum": ["fleet"], "title": "Type", "default": "fleet"}, "name": {"type": "string", "title": "Name", "description": "The fleet name"}, "env": {"allOf": [{"$ref": "#/components/schemas/Env"}], "title": "Env", "description": "The mapping or the list of environment variables", "default": {"__root__": {}}}, "ssh_config": {"allOf": [{"$ref": "#/components/schemas/SSHParamsRequest"}], "title": "Ssh Config", "description": "The parameters for adding instances via SSH"}, "nodes": {"anyOf": [{"$ref": "#/components/schemas/FleetNodesSpecRequest"}, {"type": "integer"}, {"type": "string"}], "title": "Nodes", "description": "The number of instances in cloud fleet"}, "placement": {"allOf": [{"$ref": "#/components/schemas/InstanceGroupPlacement"}], "description": "The placement of instances: `any` or `cluster`"}, "reservation": {"type": "string", "title": "Reservation", "description": "The existing reservation to use for instance provisioning. Supports AWS Capacity Reservations, AWS Capacity Blocks, and GCP reservations"}, "resources": {"allOf": [{"$ref": "#/components/schemas/ResourcesSpecRequest"}], "title": "Resources", "description": "The resources requirements", "default": {"cpu": {"min": 2}, "memory": {"min": 8.0}, "disk": {"size": {"min": 100.0}}}}, "blocks": {"anyOf": [{"type": "string", "enum": ["auto"]}, {"type": "integer", "minimum": 1.0}], "title": "Blocks", "description": "The amount of blocks to split the instance into, a number or `auto`. `auto` means as many as possible. The number of GPUs and CPUs must be divisible by the number of blocks. Defaults to `1`, i.e. do not split", "default": 1}, "backends": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array", "description": "The backends to consider for provisioning (e.g., `[aws, gcp]`)"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The regions to consider for provisioning (e.g., `[eu-west-1, us-west4, westeurope]`)"}, "availability_zones": {"items": {"type": "string"}, "type": "array", "title": "Availability Zones", "description": "The availability zones to consider for provisioning (e.g., `[eu-west-1a, us-west4-a]`)"}, "instance_types": {"items": {"type": "string"}, "type": "array", "title": "Instance Types", "description": "The cloud-specific instance types to consider for provisioning (e.g., `[p3.8xlarge, n1-standard-4]`)"}, "spot_policy": {"allOf": [{"$ref": "#/components/schemas/SpotPolicy"}], "description": "The policy for provisioning spot or on-demand instances: `spot`, `on-demand`, `auto`. Defaults to `on-demand`"}, "retry": {"anyOf": [{"$ref": "#/components/schemas/ProfileRetryRequest"}, {"type": "boolean"}], "title": "Retry", "description": "The policy for provisioning retry. Defaults to `false`"}, "max_price": {"type": "number", "exclusiveMinimum": 0.0, "title": "Max Price", "description": "The maximum instance price per hour, in dollars"}, "idle_duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Idle Duration", "description": "Time to wait before terminating idle instances. Instances are not terminated if the fleet is already at `nodes.min`. Defaults to `5m` for runs and `3d` for fleets. Use `off` for unlimited duration"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the resource. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}}, "additionalProperties": false, "type": "object", "title": "FleetConfigurationRequest"}, "FleetNodesSpecRequest": {"properties": {"min": {"type": "integer", "title": "Min", "description": "The minimum number of instances to maintain in the fleet"}, "target": {"type": "integer", "title": "Target", "description": "The number of instances to provision on fleet apply. `min` <= `target` <= `max` Defaults to `min`"}, "max": {"type": "integer", "title": "Max", "description": "The maximum number of instances allowed in the fleet. Unlimited if not specified"}}, "additionalProperties": false, "type": "object", "required": ["min", "target"], "title": "FleetNodesSpecRequest"}, "FleetPlanRequest": {"properties": {"project_name": {"type": "string", "title": "Project Name"}, "user": {"type": "string", "title": "User"}, "spec": {"$ref": "#/components/schemas/FleetSpecRequest"}, "effective_spec": {"$ref": "#/components/schemas/FleetSpecRequest"}, "current_resource": {"$ref": "#/components/schemas/FleetRequest"}, "offers": {"items": {"$ref": "#/components/schemas/InstanceOfferWithAvailabilityRequest"}, "type": "array", "title": "Offers"}, "total_offers": {"type": "integer", "title": "Total Offers"}, "max_offer_price": {"type": "number", "title": "Max Offer Price"}, "action": {"$ref": "#/components/schemas/ApplyAction"}}, "additionalProperties": false, "type": "object", "required": ["project_name", "user", "spec", "offers", "total_offers"], "title": "FleetPlanRequest"}, "FleetRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "name": {"type": "string", "title": "Name"}, "project_name": {"type": "string", "title": "Project Name"}, "spec": {"$ref": "#/components/schemas/FleetSpecRequest"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "status": {"$ref": "#/components/schemas/FleetStatus"}, "status_message": {"type": "string", "title": "Status Message"}, "instances": {"items": {"$ref": "#/components/schemas/InstanceRequest"}, "type": "array", "title": "Instances"}}, "additionalProperties": false, "type": "object", "required": ["id", "name", "project_name", "spec", "created_at", "status", "instances"], "title": "FleetRequest"}, "FleetSpecRequest": {"properties": {"configuration": {"$ref": "#/components/schemas/FleetConfigurationRequest"}, "configuration_path": {"type": "string", "title": "Configuration Path"}, "profile": {"$ref": "#/components/schemas/ProfileRequest"}, "autocreated": {"type": "boolean", "title": "Autocreated", "default": false}}, "additionalProperties": false, "type": "object", "required": ["configuration", "profile"], "title": "FleetSpecRequest"}, "FleetStatus": {"type": "string", "enum": ["submitted", "active", "terminating", "terminated", "failed"], "title": "FleetStatus", "description": "An enumeration."}, "GCPBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["gcp"], "title": "Type", "description": "The type of backend", "default": "gcp"}, "project_id": {"type": "string", "title": "Project Id", "description": "The project ID"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of GCP regions. Omit to use all regions"}, "vpc_name": {"type": "string", "title": "Vpc Name", "description": "The name of a custom VPC. If not specified, the default VPC is used"}, "extra_vpcs": {"items": {"type": "string"}, "type": "array", "title": "Extra Vpcs", "description": "The names of additional VPCs used for multi-NIC instances, such as those that support GPUDirect. Specify eight VPCs to maximize bandwidth in clusters with eight-GPU instances. Each VPC must have a subnet and a firewall rule allowing internal traffic across all subnets"}, "roce_vpcs": {"items": {"type": "string"}, "type": "array", "maxItems": 1, "title": "Roce Vpcs", "description": "The names of additional VPCs with the RoCE network profile. Used for RDMA on GPU instances that support the MRDMA interface type. A VPC should have eight subnets to maximize the bandwidth in clusters with eight-GPU instances."}, "vpc_project_id": {"type": "string", "title": "Vpc Project Id", "description": "The shared VPC hosted project ID. Required for shared VPC only"}, "public_ips": {"type": "boolean", "title": "Public Ips", "description": "A flag to enable/disable public IP assigning on instances. Defaults to `true`"}, "nat_check": {"type": "boolean", "title": "Nat Check", "description": "A flag to enable/disable a check that Cloud NAT is configured for the VPC. This should be set to `false` when `public_ips: false` and outbound internet connectivity is provided by a mechanism other than Cloud NAT such as a third-party NAT appliance. Defaults to `true`"}, "vm_service_account": {"type": "string", "title": "Vm Service Account", "description": "The service account to associate with provisioned VMs"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags (labels) that will be assigned to resources created by `dstack`"}, "preview_features": {"items": {"type": "string", "enum": ["g4"]}, "type": "array", "maxItems": 1, "title": "Preview Features", "description": "The list of preview GCP features to enable. There are currently no preview features"}}, "additionalProperties": false, "type": "object", "required": ["project_id"], "title": "GCPBackendConfigRequest"}, "GCPBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["gcp"], "title": "Type", "description": "The type of backend", "default": "gcp"}, "project_id": {"type": "string", "title": "Project Id", "description": "The project ID"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of GCP regions. Omit to use all regions"}, "vpc_name": {"type": "string", "title": "Vpc Name", "description": "The name of a custom VPC. If not specified, the default VPC is used"}, "extra_vpcs": {"items": {"type": "string"}, "type": "array", "title": "Extra Vpcs", "description": "The names of additional VPCs used for multi-NIC instances, such as those that support GPUDirect. Specify eight VPCs to maximize bandwidth in clusters with eight-GPU instances. Each VPC must have a subnet and a firewall rule allowing internal traffic across all subnets"}, "roce_vpcs": {"items": {"type": "string"}, "type": "array", "maxItems": 1, "title": "Roce Vpcs", "description": "The names of additional VPCs with the RoCE network profile. Used for RDMA on GPU instances that support the MRDMA interface type. A VPC should have eight subnets to maximize the bandwidth in clusters with eight-GPU instances."}, "vpc_project_id": {"type": "string", "title": "Vpc Project Id", "description": "The shared VPC hosted project ID. Required for shared VPC only"}, "public_ips": {"type": "boolean", "title": "Public Ips", "description": "A flag to enable/disable public IP assigning on instances. Defaults to `true`"}, "nat_check": {"type": "boolean", "title": "Nat Check", "description": "A flag to enable/disable a check that Cloud NAT is configured for the VPC. This should be set to `false` when `public_ips: false` and outbound internet connectivity is provided by a mechanism other than Cloud NAT such as a third-party NAT appliance. Defaults to `true`"}, "vm_service_account": {"type": "string", "title": "Vm Service Account", "description": "The service account to associate with provisioned VMs"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags (labels) that will be assigned to resources created by `dstack`"}, "preview_features": {"items": {"type": "string", "enum": ["g4"]}, "type": "array", "maxItems": 1, "title": "Preview Features", "description": "The list of preview GCP features to enable. There are currently no preview features"}, "creds": {"oneOf": [{"$ref": "#/components/schemas/GCPServiceAccountCredsRequest"}, {"$ref": "#/components/schemas/GCPDefaultCredsRequest"}], "title": "Creds", "description": "The credentials", "discriminator": {"propertyName": "type", "mapping": {"service_account": "#/components/schemas/GCPServiceAccountCredsRequest", "default": "#/components/schemas/GCPDefaultCredsRequest"}}}}, "additionalProperties": false, "type": "object", "required": ["project_id", "creds"], "title": "GCPBackendConfigWithCredsRequest"}, "GCPDefaultCredsRequest": {"properties": {"type": {"type": "string", "enum": ["default"], "title": "Type", "default": "default"}}, "additionalProperties": false, "type": "object", "title": "GCPDefaultCredsRequest"}, "GCPServiceAccountCredsRequest": {"properties": {"type": {"type": "string", "enum": ["service_account"], "title": "Type", "description": "The type of credentials", "default": "service_account"}, "filename": {"type": "string", "title": "Filename", "description": "The path to the service account file", "default": ""}, "data": {"type": "string", "title": "Data", "description": "The contents of the service account file"}}, "additionalProperties": false, "type": "object", "required": ["data"], "title": "GCPServiceAccountCredsRequest"}, "GPUSpecRequest": {"properties": {"vendor": {"allOf": [{"$ref": "#/components/schemas/AcceleratorVendor"}], "description": "The vendor of the GPU/accelerator, one of: `nvidia`, `amd`, `google` (alias: `tpu`), `intel`"}, "name": {"anyOf": [{"type": "array"}, {"type": "string"}], "items": {"type": "string"}, "title": "Name", "description": "The name of the GPU (e.g., `A100` or `H100`)"}, "count": {"anyOf": [{"$ref": "#/components/schemas/Range_int_"}, {"type": "integer"}, {"type": "string"}], "title": "Count", "description": "The number of GPUs", "default": {"min": 1}}, "memory": {"anyOf": [{"$ref": "#/components/schemas/Range_Memory_"}, {"type": "integer"}, {"type": "string"}], "title": "Memory", "description": "The RAM size (e.g., `16GB`). Can be set to a range (e.g. `16GB..`, or `16GB..80GB`)"}, "total_memory": {"anyOf": [{"$ref": "#/components/schemas/Range_Memory_"}, {"type": "integer"}, {"type": "string"}], "title": "Total Memory", "description": "The total RAM size (e.g., `32GB`). Can be set to a range (e.g. `16GB..`, or `16GB..80GB`)"}, "compute_capability": {"items": {}, "type": "array", "title": "Compute Capability", "description": "The minimum compute capability of the GPU (e.g., `7.5`)"}}, "additionalProperties": false, "type": "object", "title": "GPUSpecRequest"}, "GatewayConfigurationRequest": {"properties": {"type": {"type": "string", "enum": ["gateway"], "title": "Type", "default": "gateway"}, "name": {"type": "string", "title": "Name", "description": "The gateway name"}, "default": {"type": "boolean", "title": "Default", "description": "Make the gateway default", "default": false}, "backend": {"allOf": [{"$ref": "#/components/schemas/BackendType"}], "description": "The gateway backend"}, "region": {"type": "string", "title": "Region", "description": "The gateway region"}, "instance_type": {"type": "string", "minLength": 1, "title": "Instance Type", "description": "Backend-specific instance type to use for the gateway instance. Omit to use the backend's default, which is typically a small non-GPU instance"}, "router": {"allOf": [{"$ref": "#/components/schemas/SGLangRouterConfigRequest"}], "title": "Router", "description": "The router configuration"}, "domain": {"type": "string", "title": "Domain", "description": "The gateway domain, e.g. `example.com`"}, "public_ip": {"type": "boolean", "title": "Public Ip", "description": "Allocate public IP for the gateway", "default": true}, "certificate": {"anyOf": [{"$ref": "#/components/schemas/LetsEncryptGatewayCertificateRequest"}, {"$ref": "#/components/schemas/ACMGatewayCertificateRequest"}], "title": "Certificate", "description": "The SSL certificate configuration. Defaults to `type: lets-encrypt`", "default": {"type": "lets-encrypt"}}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the gateway. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}}, "additionalProperties": false, "type": "object", "required": ["backend", "region"], "title": "GatewayConfigurationRequest"}, "GatewayRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "name": {"type": "string", "title": "Name"}, "configuration": {"$ref": "#/components/schemas/GatewayConfigurationRequest"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "status": {"$ref": "#/components/schemas/GatewayStatus"}, "status_message": {"type": "string", "title": "Status Message"}, "hostname": {"type": "string", "title": "Hostname"}, "ip_address": {"type": "string", "title": "Ip Address"}, "instance_id": {"type": "string", "title": "Instance Id"}, "wildcard_domain": {"type": "string", "title": "Wildcard Domain"}, "default": {"type": "boolean", "title": "Default"}, "backend": {"$ref": "#/components/schemas/BackendType"}, "region": {"type": "string", "title": "Region"}}, "additionalProperties": false, "type": "object", "required": ["name", "configuration", "created_at", "status", "default"], "title": "GatewayRequest"}, "GatewayStatus": {"type": "string", "enum": ["submitted", "provisioning", "running", "failed"], "title": "GatewayStatus", "description": "An enumeration."}, "GetFileArchiveByHashRequestRequest": {"properties": {"hash": {"type": "string", "title": "Hash"}}, "additionalProperties": false, "type": "object", "required": ["hash"], "title": "GetFileArchiveByHashRequestRequest"}, "GetFleetPlanRequestRequest": {"properties": {"spec": {"$ref": "#/components/schemas/FleetSpecRequest"}}, "additionalProperties": false, "type": "object", "required": ["spec"], "title": "GetFleetPlanRequestRequest"}, "GetFleetRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "id": {"type": "string", "format": "uuid", "title": "Id"}}, "additionalProperties": false, "type": "object", "title": "GetFleetRequestRequest"}, "GetGatewayRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}}, "additionalProperties": false, "type": "object", "required": ["name"], "title": "GetGatewayRequestRequest"}, "GetInstanceHealthChecksRequestRequest": {"properties": {"fleet_name": {"type": "string", "title": "Fleet Name"}, "instance_num": {"type": "integer", "title": "Instance Num"}, "after": {"type": "string", "format": "date-time", "title": "After"}, "before": {"type": "string", "format": "date-time", "title": "Before"}, "limit": {"type": "integer", "title": "Limit"}}, "additionalProperties": false, "type": "object", "required": ["fleet_name", "instance_num"], "title": "GetInstanceHealthChecksRequestRequest"}, "GetInstanceHealthChecksResponseRequest": {"properties": {"health_checks": {"items": {"$ref": "#/components/schemas/HealthCheckRequest"}, "type": "array", "title": "Health Checks"}}, "additionalProperties": false, "type": "object", "required": ["health_checks"], "title": "GetInstanceHealthChecksResponseRequest"}, "GetRepoRequestRequest": {"properties": {"repo_id": {"type": "string", "title": "Repo Id", "description": "A unique identifier of the repo"}, "include_creds": {"type": "boolean", "title": "Include Creds"}}, "additionalProperties": false, "type": "object", "required": ["repo_id", "include_creds"], "title": "GetRepoRequestRequest"}, "GetRunPlanRequestRequest": {"properties": {"run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}, "max_offers": {"type": "integer", "maximum": 10000.0, "minimum": 1.0, "title": "Max Offers", "description": "The maximum number of offers to return"}}, "additionalProperties": false, "type": "object", "required": ["run_spec"], "title": "GetRunPlanRequestRequest"}, "GetRunRequestRequest": {"properties": {"run_name": {"type": "string", "title": "Run Name"}, "id": {"type": "string", "format": "uuid", "title": "Id"}}, "additionalProperties": false, "type": "object", "title": "GetRunRequestRequest"}, "GetSecretRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}}, "additionalProperties": false, "type": "object", "required": ["name"], "title": "GetSecretRequestRequest"}, "GetUserRequestRequest": {"properties": {"username": {"type": "string", "title": "Username"}}, "additionalProperties": false, "type": "object", "required": ["username"], "title": "GetUserRequestRequest"}, "GetVolumeRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}}, "additionalProperties": false, "type": "object", "required": ["name"], "title": "GetVolumeRequestRequest"}, "GlobalRole": {"type": "string", "enum": ["admin", "user"], "title": "GlobalRole", "description": "An enumeration."}, "GpuGroupRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "memory_mib": {"type": "integer", "title": "Memory Mib"}, "vendor": {"$ref": "#/components/schemas/AcceleratorVendor"}, "availability": {"items": {"$ref": "#/components/schemas/InstanceAvailability"}, "type": "array"}, "spot": {"items": {"type": "string", "enum": ["spot", "on-demand"]}, "type": "array", "title": "Spot"}, "count": {"$ref": "#/components/schemas/Range_int_"}, "price": {"$ref": "#/components/schemas/Range_float_"}, "backends": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array"}, "backend": {"$ref": "#/components/schemas/BackendType"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions"}, "region": {"type": "string", "title": "Region"}}, "additionalProperties": false, "type": "object", "required": ["name", "memory_mib", "vendor", "availability", "spot", "count", "price"], "title": "GpuGroupRequest", "description": "GPU group that can handle all grouping scenarios."}, "GpuRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "memory_mib": {"type": "integer", "title": "Memory Mib"}, "vendor": {"$ref": "#/components/schemas/AcceleratorVendor"}}, "additionalProperties": false, "type": "object", "required": ["name", "memory_mib"], "title": "GpuRequest"}, "HTTPHeaderSpecRequest": {"properties": {"name": {"type": "string", "maxLength": 256, "minLength": 1, "title": "Name", "description": "The name of the HTTP header"}, "value": {"type": "string", "maxLength": 2048, "minLength": 1, "title": "Value", "description": "The value of the HTTP header"}}, "additionalProperties": false, "type": "object", "required": ["name", "value"], "title": "HTTPHeaderSpecRequest"}, "HTTPValidationError": {"properties": {"detail": {"items": {"$ref": "#/components/schemas/ValidationError"}, "type": "array", "title": "Detail"}}, "type": "object", "title": "HTTPValidationError"}, "HeaderPartitioningKeyRequest": {"properties": {"type": {"type": "string", "enum": ["header"], "title": "Type", "description": "Partitioning type", "default": "header"}, "header": {"type": "string", "maxLength": 500, "pattern": "^[a-zA-Z0-9-_]+$", "title": "Header", "description": "Name of the header to use for partitioning"}}, "additionalProperties": false, "type": "object", "required": ["header"], "title": "HeaderPartitioningKeyRequest"}, "HealthCheckRequest": {"properties": {"collected_at": {"type": "string", "format": "date-time", "title": "Collected At"}, "status": {"$ref": "#/components/schemas/HealthStatus"}, "events": {"items": {"$ref": "#/components/schemas/HealthEventRequest"}, "type": "array", "title": "Events"}}, "additionalProperties": false, "type": "object", "required": ["collected_at", "status", "events"], "title": "HealthCheckRequest"}, "HealthEventRequest": {"properties": {"timestamp": {"type": "string", "format": "date-time", "title": "Timestamp"}, "status": {"$ref": "#/components/schemas/HealthStatus"}, "message": {"type": "string", "title": "Message"}}, "additionalProperties": false, "type": "object", "required": ["timestamp", "status", "message"], "title": "HealthEventRequest"}, "HealthStatus": {"type": "string", "enum": ["healthy", "warning", "failure"], "title": "HealthStatus", "description": "An enumeration."}, "HotAisleAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The Hot Aisle API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "HotAisleAPIKeyCredsRequest"}, "HotAisleBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["hotaisle"], "title": "Type", "description": "The type of backend", "default": "hotaisle"}, "team_handle": {"type": "string", "title": "Team Handle", "description": "The Hot Aisle team handle"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Hot Aisle regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "required": ["team_handle"], "title": "HotAisleBackendConfigRequest"}, "HotAisleBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["hotaisle"], "title": "Type", "description": "The type of backend", "default": "hotaisle"}, "team_handle": {"type": "string", "title": "Team Handle", "description": "The Hot Aisle team handle"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Hot Aisle regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/HotAisleAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["team_handle", "creds"], "title": "HotAisleBackendConfigWithCredsRequest"}, "IPAddressPartitioningKeyRequest": {"properties": {"type": {"type": "string", "enum": ["ip_address"], "title": "Type", "description": "Partitioning type", "default": "ip_address"}}, "additionalProperties": false, "type": "object", "title": "IPAddressPartitioningKeyRequest"}, "InstanceAvailability": {"enum": ["unknown", "available", "not_available", "no_quota", "no_balance", "idle", "busy"], "title": "InstanceAvailability", "description": "An enumeration."}, "InstanceGroupPlacement": {"type": "string", "enum": ["any", "cluster"], "title": "InstanceGroupPlacement", "description": "An enumeration."}, "InstanceMountPointRequest": {"properties": {"instance_path": {"type": "string", "title": "Instance Path", "description": "The absolute path on the instance (host)"}, "path": {"type": "string", "title": "Path", "description": "The absolute path in the container"}, "optional": {"type": "boolean", "title": "Optional", "description": "Allow running without this volume in backends that do not support instance volumes", "default": false}}, "additionalProperties": false, "type": "object", "required": ["instance_path", "path"], "title": "InstanceMountPointRequest"}, "InstanceOfferWithAvailabilityRequest": {"properties": {"backend": {"$ref": "#/components/schemas/BackendType"}, "instance": {"$ref": "#/components/schemas/InstanceTypeRequest"}, "region": {"type": "string", "title": "Region"}, "price": {"type": "number", "title": "Price"}, "backend_data": {"type": "object", "title": "Backend Data", "default": {}}, "availability": {"$ref": "#/components/schemas/InstanceAvailability"}, "availability_zones": {"items": {"type": "string"}, "type": "array", "title": "Availability Zones"}, "instance_runtime": {"allOf": [{"$ref": "#/components/schemas/InstanceRuntime"}], "default": "shim"}, "blocks": {"type": "integer", "title": "Blocks", "default": 1}, "total_blocks": {"type": "integer", "title": "Total Blocks", "default": 1}}, "additionalProperties": false, "type": "object", "required": ["backend", "instance", "region", "price", "availability"], "title": "InstanceOfferWithAvailabilityRequest"}, "InstanceRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "project_name": {"type": "string", "title": "Project Name"}, "backend": {"$ref": "#/components/schemas/BackendType"}, "instance_type": {"$ref": "#/components/schemas/InstanceTypeRequest"}, "name": {"type": "string", "title": "Name"}, "fleet_id": {"type": "string", "format": "uuid", "title": "Fleet Id"}, "fleet_name": {"type": "string", "title": "Fleet Name"}, "instance_num": {"type": "integer", "title": "Instance Num"}, "job_name": {"type": "string", "title": "Job Name"}, "hostname": {"type": "string", "title": "Hostname"}, "status": {"$ref": "#/components/schemas/InstanceStatus"}, "unreachable": {"type": "boolean", "title": "Unreachable", "default": false}, "health_status": {"allOf": [{"$ref": "#/components/schemas/HealthStatus"}], "default": "healthy"}, "termination_reason": {"type": "string", "title": "Termination Reason"}, "termination_reason_message": {"type": "string", "title": "Termination Reason Message"}, "created": {"type": "string", "format": "date-time", "title": "Created"}, "region": {"type": "string", "title": "Region"}, "availability_zone": {"type": "string", "title": "Availability Zone"}, "price": {"type": "number", "title": "Price"}, "total_blocks": {"type": "integer", "title": "Total Blocks"}, "busy_blocks": {"type": "integer", "title": "Busy Blocks", "default": 0}}, "additionalProperties": false, "type": "object", "required": ["id", "project_name", "name", "instance_num", "status", "created"], "title": "InstanceRequest"}, "InstanceRuntime": {"enum": ["shim", "runner"], "title": "InstanceRuntime", "description": "An enumeration."}, "InstanceStatus": {"type": "string", "enum": ["pending", "provisioning", "idle", "busy", "terminating", "terminated"], "title": "InstanceStatus", "description": "An enumeration."}, "InstanceTypeRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "resources": {"$ref": "#/components/schemas/ResourcesRequest"}}, "additionalProperties": false, "type": "object", "required": ["name", "resources"], "title": "InstanceTypeRequest"}, "JobMetricsRequest": {"properties": {"metrics": {"items": {"$ref": "#/components/schemas/MetricRequest"}, "type": "array", "title": "Metrics"}}, "additionalProperties": false, "type": "object", "required": ["metrics"], "title": "JobMetricsRequest"}, "JobPlanRequest": {"properties": {"job_spec": {"$ref": "#/components/schemas/JobSpecRequest"}, "offers": {"items": {"$ref": "#/components/schemas/InstanceOfferWithAvailabilityRequest"}, "type": "array", "title": "Offers"}, "total_offers": {"type": "integer", "title": "Total Offers"}, "max_price": {"type": "number", "title": "Max Price"}}, "additionalProperties": false, "type": "object", "required": ["job_spec", "offers", "total_offers"], "title": "JobPlanRequest"}, "JobProvisioningDataRequest": {"properties": {"backend": {"$ref": "#/components/schemas/BackendType"}, "base_backend": {"$ref": "#/components/schemas/BackendType"}, "instance_type": {"$ref": "#/components/schemas/InstanceTypeRequest"}, "instance_id": {"type": "string", "title": "Instance Id"}, "hostname": {"type": "string", "title": "Hostname"}, "internal_ip": {"type": "string", "title": "Internal Ip"}, "public_ip_enabled": {"type": "boolean", "title": "Public Ip Enabled", "default": true}, "instance_network": {"type": "string", "title": "Instance Network"}, "region": {"type": "string", "title": "Region"}, "availability_zone": {"type": "string", "title": "Availability Zone"}, "reservation": {"type": "string", "title": "Reservation"}, "price": {"type": "number", "title": "Price"}, "username": {"type": "string", "title": "Username"}, "ssh_port": {"type": "integer", "title": "Ssh Port"}, "dockerized": {"type": "boolean", "title": "Dockerized"}, "ssh_proxy": {"$ref": "#/components/schemas/SSHConnectionParamsRequest"}, "backend_data": {"type": "string", "title": "Backend Data"}}, "additionalProperties": false, "type": "object", "required": ["backend", "instance_type", "instance_id", "region", "price", "username", "dockerized"], "title": "JobProvisioningDataRequest"}, "JobRequest": {"properties": {"job_spec": {"$ref": "#/components/schemas/JobSpecRequest"}, "job_submissions": {"items": {"$ref": "#/components/schemas/JobSubmissionRequest"}, "type": "array", "title": "Job Submissions"}}, "additionalProperties": false, "type": "object", "required": ["job_spec", "job_submissions"], "title": "JobRequest"}, "JobRuntimeDataRequest": {"properties": {"network_mode": {"$ref": "#/components/schemas/NetworkMode"}, "gpu": {"type": "integer", "title": "Gpu"}, "cpu": {"type": "number", "title": "Cpu"}, "memory": {"type": "number", "title": "Memory"}, "ports": {"additionalProperties": {"type": "integer"}, "type": "object", "title": "Ports"}, "volume_names": {"items": {"type": "string"}, "type": "array", "title": "Volume Names"}, "offer": {"$ref": "#/components/schemas/InstanceOfferWithAvailabilityRequest"}}, "additionalProperties": false, "type": "object", "required": ["network_mode"], "title": "JobRuntimeDataRequest", "description": "Holds various information only available after the job is submitted, such as:\n * offer (depends on the instance)\n * volumes used by the job\n * resource constraints for container (depend on the instance)\n * port mapping (reported by the shim only after the container is started)\n\nSome fields are mutable, for example, `ports` only available when the shim starts\nthe container."}, "JobSSHKeyRequest": {"properties": {"private": {"type": "string", "title": "Private"}, "public": {"type": "string", "title": "Public"}}, "additionalProperties": false, "type": "object", "required": ["private", "public"], "title": "JobSSHKeyRequest"}, "JobSpecRequest": {"properties": {"replica_num": {"type": "integer", "title": "Replica Num", "default": 0}, "job_num": {"type": "integer", "title": "Job Num"}, "job_name": {"type": "string", "title": "Job Name"}, "jobs_per_replica": {"type": "integer", "title": "Jobs Per Replica", "default": 1}, "replica_group": {"type": "string", "title": "Replica Group", "default": "0"}, "app_specs": {"items": {"$ref": "#/components/schemas/AppSpecRequest"}, "type": "array", "title": "App Specs"}, "user": {"$ref": "#/components/schemas/UnixUserRequest"}, "commands": {"items": {"type": "string"}, "type": "array", "title": "Commands"}, "env": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Env"}, "home_dir": {"type": "string", "title": "Home Dir"}, "image_name": {"type": "string", "title": "Image Name"}, "privileged": {"type": "boolean", "title": "Privileged", "default": false}, "single_branch": {"type": "boolean", "title": "Single Branch"}, "max_duration": {"type": "integer", "title": "Max Duration"}, "stop_duration": {"type": "integer", "title": "Stop Duration"}, "utilization_policy": {"$ref": "#/components/schemas/UtilizationPolicyRequest"}, "registry_auth": {"$ref": "#/components/schemas/RegistryAuthRequest"}, "requirements": {"$ref": "#/components/schemas/RequirementsRequest"}, "retry": {"$ref": "#/components/schemas/RetryRequest"}, "volumes": {"items": {"anyOf": [{"$ref": "#/components/schemas/VolumeMountPointRequest"}, {"$ref": "#/components/schemas/InstanceMountPointRequest"}]}, "type": "array", "title": "Volumes"}, "ssh_key": {"$ref": "#/components/schemas/JobSSHKeyRequest"}, "working_dir": {"type": "string", "title": "Working Dir"}, "repo_data": {"oneOf": [{"$ref": "#/components/schemas/RemoteRunRepoDataRequest"}, {"$ref": "#/components/schemas/LocalRunRepoDataRequest"}, {"$ref": "#/components/schemas/VirtualRunRepoDataRequest"}], "title": "Repo Data", "discriminator": {"propertyName": "repo_type", "mapping": {"remote": "#/components/schemas/RemoteRunRepoDataRequest", "local": "#/components/schemas/LocalRunRepoDataRequest", "virtual": "#/components/schemas/VirtualRunRepoDataRequest"}}}, "repo_code_hash": {"type": "string", "title": "Repo Code Hash"}, "repo_dir": {"type": "string", "title": "Repo Dir", "default": "/workflow"}, "repo_exists_action": {"$ref": "#/components/schemas/RepoExistsAction"}, "file_archives": {"items": {"$ref": "#/components/schemas/FileArchiveMappingRequest"}, "type": "array", "title": "File Archives", "default": []}, "service_port": {"type": "integer", "title": "Service Port"}, "probes": {"items": {"$ref": "#/components/schemas/ProbeSpecRequest"}, "type": "array", "title": "Probes", "default": []}}, "additionalProperties": false, "type": "object", "required": ["job_num", "job_name", "commands", "env", "image_name", "requirements"], "title": "JobSpecRequest"}, "JobStatus": {"type": "string", "enum": ["submitted", "provisioning", "pulling", "running", "terminating", "terminated", "aborted", "failed", "done"], "title": "JobStatus", "description": "An enumeration."}, "JobSubmissionLogsRequest": {"properties": {"logs": {"items": {"$ref": "#/components/schemas/LogEventRequest"}, "type": "array", "title": "Logs"}, "external_url": {"type": "string", "title": "External Url"}, "next_token": {"type": "string", "title": "Next Token"}}, "additionalProperties": false, "type": "object", "required": ["logs"], "title": "JobSubmissionLogsRequest"}, "JobSubmissionRequest": {"properties": {"id": {"type": "string", "format": "uuid4", "title": "Id"}, "submission_num": {"type": "integer", "title": "Submission Num"}, "deployment_num": {"type": "integer", "title": "Deployment Num", "default": 0}, "submitted_at": {"type": "string", "format": "date-time", "title": "Submitted At"}, "last_processed_at": {"type": "string", "format": "date-time", "title": "Last Processed At"}, "finished_at": {"type": "string", "format": "date-time", "title": "Finished At"}, "inactivity_secs": {"type": "integer", "title": "Inactivity Secs"}, "status": {"$ref": "#/components/schemas/JobStatus"}, "status_message": {"type": "string", "title": "Status Message", "default": ""}, "termination_reason": {"type": "string", "title": "Termination Reason"}, "termination_reason_message": {"type": "string", "title": "Termination Reason Message"}, "exit_status": {"type": "integer", "title": "Exit Status"}, "job_provisioning_data": {"$ref": "#/components/schemas/JobProvisioningDataRequest"}, "job_runtime_data": {"$ref": "#/components/schemas/JobRuntimeDataRequest"}, "error": {"type": "string", "title": "Error"}, "probes": {"items": {"$ref": "#/components/schemas/ProbeRequest"}, "type": "array", "title": "Probes", "default": []}}, "additionalProperties": false, "type": "object", "required": ["id", "submission_num", "submitted_at", "last_processed_at", "status"], "title": "JobSubmissionRequest"}, "KubeconfigConfigRequest": {"properties": {"filename": {"type": "string", "title": "Filename", "description": "The path to the kubeconfig file", "default": ""}, "data": {"type": "string", "title": "Data", "description": "The contents of the kubeconfig file"}}, "additionalProperties": false, "type": "object", "required": ["data"], "title": "KubeconfigConfigRequest"}, "KubernetesBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["kubernetes"], "title": "Type", "description": "The type of backend", "default": "kubernetes"}, "proxy_jump": {"allOf": [{"$ref": "#/components/schemas/KubernetesProxyJumpConfigRequest"}], "title": "Proxy Jump", "description": "The SSH proxy jump configuration"}, "namespace": {"type": "string", "title": "Namespace", "description": "The namespace for resources managed by `dstack`", "default": "default"}}, "additionalProperties": false, "type": "object", "title": "KubernetesBackendConfigRequest"}, "KubernetesBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["kubernetes"], "title": "Type", "description": "The type of backend", "default": "kubernetes"}, "proxy_jump": {"allOf": [{"$ref": "#/components/schemas/KubernetesProxyJumpConfigRequest"}], "title": "Proxy Jump", "description": "The SSH proxy jump configuration"}, "namespace": {"type": "string", "title": "Namespace", "description": "The namespace for resources managed by `dstack`", "default": "default"}, "kubeconfig": {"allOf": [{"$ref": "#/components/schemas/KubeconfigConfigRequest"}], "title": "Kubeconfig", "description": "The kubeconfig configuration"}}, "additionalProperties": false, "type": "object", "required": ["kubeconfig"], "title": "KubernetesBackendConfigWithCredsRequest"}, "KubernetesProxyJumpConfigRequest": {"properties": {"hostname": {"type": "string", "title": "Hostname", "description": "The external IP address or hostname of any node"}, "port": {"type": "integer", "title": "Port", "description": "Any port accessible outside of the cluster"}}, "additionalProperties": false, "type": "object", "title": "KubernetesProxyJumpConfigRequest"}, "LambdaAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "LambdaAPIKeyCredsRequest"}, "LambdaBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["lambda"], "title": "Type", "description": "The type of backend", "default": "lambda"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Lambda regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "title": "LambdaBackendConfigRequest"}, "LambdaBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["lambda"], "title": "Type", "description": "The type of backend", "default": "lambda"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Lambda regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/LambdaAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "LambdaBackendConfigWithCredsRequest"}, "LetsEncryptGatewayCertificateRequest": {"properties": {"type": {"type": "string", "enum": ["lets-encrypt"], "title": "Type", "description": "Automatic certificates by Let's Encrypt", "default": "lets-encrypt"}}, "additionalProperties": false, "type": "object", "title": "LetsEncryptGatewayCertificateRequest"}, "ListEventsRequestRequest": {"properties": {"target_projects": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Projects", "description": "List of project IDs. The response will only include events that target the specified projects"}, "target_users": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Users", "description": "List of user IDs. The response will only include events that target the specified users"}, "target_fleets": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Fleets", "description": "List of fleet IDs. The response will only include events that target the specified fleets"}, "target_instances": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Instances", "description": "List of instance IDs. The response will only include events that target the specified instances"}, "target_runs": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Runs", "description": "List of run IDs. The response will only include events that target the specified runs"}, "target_jobs": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Jobs", "description": "List of job IDs. The response will only include events that target the specified jobs"}, "target_volumes": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Volumes", "description": "List of volume IDs. The response will only include events that target the specified volumes"}, "target_gateways": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Gateways", "description": "List of gateway IDs. The response will only include events that target the specified gateways"}, "target_secrets": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Target Secrets", "description": "List of secret IDs. The response will only include events that target the specified secrets"}, "within_projects": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Within Projects", "description": "List of project IDs. The response will only include events that target the specified projects or any entities within those projects"}, "within_fleets": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Within Fleets", "description": "List of fleet IDs. The response will only include events that target the specified fleets or instances within those fleets"}, "within_runs": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Within Runs", "description": "List of run IDs. The response will only include events that target the specified runs or jobs within those runs"}, "include_target_types": {"items": {"$ref": "#/components/schemas/EventTargetType"}, "type": "array", "maxItems": 16, "minItems": 1, "description": "List of target types. The response will only include events that have a target of one of the specified types"}, "actors": {"items": {"type": "string", "format": "uuid"}, "type": "array", "maxItems": 16, "minItems": 1, "title": "Actors", "description": "List of user IDs or `null` values. The response will only include events about actions performed by the specified users, or performed by the system if `null` is specified"}, "prev_recorded_at": {"type": "string", "format": "date-time", "title": "Prev Recorded At"}, "prev_id": {"type": "string", "format": "uuid", "title": "Prev Id"}, "limit": {"type": "integer", "maximum": 100.0, "minimum": 1.0, "title": "Limit", "default": 100}, "ascending": {"type": "boolean", "title": "Ascending", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListEventsRequestRequest"}, "ListFleetsRequestRequest": {"properties": {"project_name": {"type": "string", "title": "Project Name"}, "only_active": {"type": "boolean", "title": "Only Active", "default": false}, "prev_created_at": {"type": "string", "format": "date-time", "title": "Prev Created At"}, "prev_id": {"type": "string", "format": "uuid", "title": "Prev Id"}, "limit": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Limit", "default": 100}, "ascending": {"type": "boolean", "title": "Ascending", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListFleetsRequestRequest"}, "ListGpusRequestRequest": {"properties": {"run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}, "group_by": {"items": {"type": "string", "enum": ["backend", "region", "count"]}, "type": "array", "title": "Group By", "description": "List of fields to group by. Valid values: 'backend', 'region', 'count'. Note: 'region' can only be used together with 'backend'."}}, "additionalProperties": false, "type": "object", "required": ["run_spec"], "title": "ListGpusRequestRequest", "description": "Request for listing GPUs with optional grouping."}, "ListGpusResponseRequest": {"properties": {"gpus": {"items": {"$ref": "#/components/schemas/GpuGroupRequest"}, "type": "array", "title": "Gpus", "description": "List of GPU specifications, grouped according to the group_by parameter"}}, "additionalProperties": false, "type": "object", "required": ["gpus"], "title": "ListGpusResponseRequest", "description": "Response containing GPU specifications."}, "ListInstancesRequestRequest": {"properties": {"project_names": {"items": {"type": "string"}, "type": "array", "title": "Project Names"}, "fleet_ids": {"items": {"type": "string", "format": "uuid"}, "type": "array", "title": "Fleet Ids"}, "only_active": {"type": "boolean", "title": "Only Active", "default": false}, "prev_created_at": {"type": "string", "format": "date-time", "title": "Prev Created At"}, "prev_id": {"type": "string", "format": "uuid", "title": "Prev Id"}, "limit": {"type": "integer", "title": "Limit", "default": 1000}, "ascending": {"type": "boolean", "title": "Ascending", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListInstancesRequestRequest"}, "ListProjectsRequestRequest": {"properties": {"include_not_joined": {"type": "boolean", "title": "Include Not Joined", "description": "Include public projects where user is not a member.", "default": true}, "return_total_count": {"type": "boolean", "title": "Return Total Count", "description": "Return `total_count` with the total number of projects.", "default": false}, "name_pattern": {"type": "string", "pattern": "^[a-zA-Z0-9-_]*$", "title": "Name Pattern", "description": "Include only projects with the name containing `name_pattern`."}, "prev_created_at": {"type": "string", "format": "date-time", "title": "Prev Created At", "description": "Paginate projects by specifying `created_at` of the last (first) project in previous batch for descending (ascending)."}, "prev_id": {"type": "string", "format": "uuid", "title": "Prev Id", "description": "Paginate projects by specifying `id` of the last (first) project in previous batch for descending (ascending). Must be used together with `prev_created_at`."}, "limit": {"type": "integer", "maximum": 2000.0, "minimum": 0.0, "title": "Limit", "description": "Limit number of projects returned.", "default": 2000}, "ascending": {"type": "boolean", "title": "Ascending", "description": "Return projects sorted by `created_at` in ascending order. Defaults to descending.", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListProjectsRequestRequest"}, "ListRunsRequestRequest": {"properties": {"project_name": {"type": "string", "title": "Project Name"}, "repo_id": {"type": "string", "title": "Repo Id"}, "username": {"type": "string", "title": "Username"}, "only_active": {"type": "boolean", "title": "Only Active", "default": false}, "include_jobs": {"type": "boolean", "title": "Include Jobs", "description": "Whether to include `jobs` in the response", "default": true}, "job_submissions_limit": {"type": "integer", "minimum": 0.0, "title": "Job Submissions Limit", "description": "Limit number of job submissions returned per job to avoid large responses.Drops older job submissions. No effect with `include_jobs: false`"}, "prev_submitted_at": {"type": "string", "format": "date-time", "title": "Prev Submitted At"}, "prev_run_id": {"type": "string", "format": "uuid", "title": "Prev Run Id"}, "limit": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Limit", "default": 100}, "ascending": {"type": "boolean", "title": "Ascending", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListRunsRequestRequest"}, "ListUsersRequestRequest": {"properties": {"return_total_count": {"type": "boolean", "title": "Return Total Count", "description": "Return `total_count` with the total number of users.", "default": false}, "name_pattern": {"type": "string", "pattern": "^[a-zA-Z0-9-_]*$", "title": "Name Pattern", "description": "Include only users with the name containing `name_pattern`."}, "prev_created_at": {"type": "string", "format": "date-time", "title": "Prev Created At", "description": "Paginate users by specifying `created_at` of the last (first) user in previous batch for descending (ascending)."}, "prev_id": {"type": "string", "format": "uuid", "title": "Prev Id", "description": "Paginate users by specifying `id` of the last (first) user in previous batch for descending (ascending). Must be used together with `prev_created_at`."}, "limit": {"type": "integer", "maximum": 2000.0, "minimum": 0.0, "title": "Limit", "description": "Limit number of users returned.", "default": 2000}, "ascending": {"type": "boolean", "title": "Ascending", "description": "Return users sorted by `created_at` in ascending order. Defaults to descending.", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListUsersRequestRequest"}, "ListVolumesRequestRequest": {"properties": {"project_name": {"type": "string", "title": "Project Name"}, "only_active": {"type": "boolean", "title": "Only Active", "default": false}, "prev_created_at": {"type": "string", "format": "date-time", "title": "Prev Created At"}, "prev_id": {"type": "string", "format": "uuid", "title": "Prev Id"}, "limit": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Limit", "default": 100}, "ascending": {"type": "boolean", "title": "Ascending", "default": false}}, "additionalProperties": false, "type": "object", "title": "ListVolumesRequestRequest"}, "LocalRepoInfoRequest": {"properties": {"repo_type": {"type": "string", "enum": ["local"], "title": "Repo Type", "default": "local"}, "repo_dir": {"type": "string", "title": "Repo Dir"}}, "additionalProperties": false, "type": "object", "required": ["repo_dir"], "title": "LocalRepoInfoRequest"}, "LocalRunRepoDataRequest": {"properties": {"repo_type": {"type": "string", "enum": ["local"], "title": "Repo Type", "default": "local"}, "repo_dir": {"type": "string", "title": "Repo Dir"}}, "additionalProperties": false, "type": "object", "required": ["repo_dir"], "title": "LocalRunRepoDataRequest"}, "LogEventRequest": {"properties": {"timestamp": {"type": "string", "format": "date-time", "title": "Timestamp"}, "log_source": {"$ref": "#/components/schemas/LogEventSource"}, "message": {"type": "string", "title": "Message"}}, "additionalProperties": false, "type": "object", "required": ["timestamp", "log_source", "message"], "title": "LogEventRequest"}, "LogEventSource": {"type": "string", "enum": ["stdout", "stderr"], "title": "LogEventSource", "description": "An enumeration."}, "MemberPermissionsRequest": {"properties": {"can_manage_ssh_fleets": {"type": "boolean", "title": "Can Manage Ssh Fleets"}}, "additionalProperties": false, "type": "object", "required": ["can_manage_ssh_fleets"], "title": "MemberPermissionsRequest"}, "MemberRequest": {"properties": {"user": {"$ref": "#/components/schemas/UserRequest"}, "project_role": {"$ref": "#/components/schemas/ProjectRole"}, "permissions": {"$ref": "#/components/schemas/MemberPermissionsRequest"}}, "additionalProperties": false, "type": "object", "required": ["user", "project_role", "permissions"], "title": "MemberRequest"}, "MemberSettingRequest": {"properties": {"username": {"type": "string", "title": "Username", "description": "The username or email of the user"}, "project_role": {"$ref": "#/components/schemas/ProjectRole"}}, "additionalProperties": false, "type": "object", "required": ["username", "project_role"], "title": "MemberSettingRequest"}, "MetricRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "timestamps": {"items": {"type": "string", "format": "date-time"}, "type": "array", "title": "Timestamps"}, "values": {"items": {}, "type": "array", "title": "Values"}}, "additionalProperties": false, "type": "object", "required": ["name", "timestamps", "values"], "title": "MetricRequest"}, "ModelRequest": {"properties": {"object": {"type": "string", "enum": ["model"], "title": "Object", "default": "model"}, "id": {"type": "string", "title": "Id"}, "created": {"type": "integer", "title": "Created"}, "owned_by": {"type": "string", "title": "Owned By"}}, "additionalProperties": false, "type": "object", "required": ["id", "created", "owned_by"], "title": "ModelRequest"}, "ModelsResponseRequest": {"properties": {"object": {"type": "string", "enum": ["list"], "title": "Object", "default": "list"}, "data": {"items": {"$ref": "#/components/schemas/ModelRequest"}, "type": "array", "title": "Data"}}, "additionalProperties": false, "type": "object", "required": ["data"], "title": "ModelsResponseRequest"}, "NebiusBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["nebius"], "title": "Type", "description": "The type of backend", "default": "nebius"}, "projects": {"items": {"type": "string"}, "type": "array", "title": "Projects", "description": "The list of allowed Nebius project IDs. Omit to use the default project in each region. The project is considered default if it is the only project in the region or if its name starts with `default`"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of allowed Nebius regions. Omit to allow all regions"}, "fabrics": {"items": {"type": "string"}, "type": "array", "title": "Fabrics", "description": "The list of allowed fabrics for InfiniBand clusters. Omit to allow all fabrics"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags (labels) that will be assigned to resources created by `dstack`"}}, "additionalProperties": false, "type": "object", "title": "NebiusBackendConfigRequest", "description": "The backend config used in the API, server/config.yml, `NebiusConfigurator`.\nIt also serves as a base class for other backend config models.\nShould not include creds."}, "NebiusBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["nebius"], "title": "Type", "description": "The type of backend", "default": "nebius"}, "projects": {"items": {"type": "string"}, "type": "array", "title": "Projects", "description": "The list of allowed Nebius project IDs. Omit to use the default project in each region. The project is considered default if it is the only project in the region or if its name starts with `default`"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of allowed Nebius regions. Omit to allow all regions"}, "fabrics": {"items": {"type": "string"}, "type": "array", "title": "Fabrics", "description": "The list of allowed fabrics for InfiniBand clusters. Omit to allow all fabrics"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The tags (labels) that will be assigned to resources created by `dstack`"}, "creds": {"allOf": [{"$ref": "#/components/schemas/NebiusServiceAccountCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "NebiusBackendConfigWithCredsRequest", "description": "Same as `NebiusBackendConfig` but also includes creds."}, "NebiusServiceAccountCredsRequest": {"properties": {"type": {"type": "string", "enum": ["service_account"], "title": "Type", "description": "The type of credentials", "default": "service_account"}, "service_account_id": {"type": "string", "title": "Service Account Id", "description": "Service account ID"}, "public_key_id": {"type": "string", "title": "Public Key Id", "description": "ID of the service account public key"}, "private_key_file": {"type": "string", "title": "Private Key File", "description": "Path to the service account private key"}, "private_key_content": {"type": "string", "title": "Private Key Content", "description": "Content of the service account private key. When configuring via `server/config.yml`, it's automatically filled from `private_key_file`. When configuring via UI, it has to be specified explicitly."}, "filename": {"type": "string", "title": "Filename", "description": "The path to the service account credentials file"}}, "additionalProperties": false, "type": "object", "required": ["service_account_id", "public_key_id", "private_key_content"], "title": "NebiusServiceAccountCredsRequest"}, "NetworkMode": {"type": "string", "enum": ["host", "bridge"], "title": "NetworkMode", "description": "An enumeration."}, "OAuthGetNextRedirectRequestRequest": {"properties": {"code": {"type": "string", "title": "Code", "description": "The OAuth2 authorization code received from the provider in the redirect URL."}, "state": {"type": "string", "title": "State", "description": "The state parameter received from the provider in the redirect URL."}}, "additionalProperties": false, "type": "object", "required": ["code", "state"], "title": "OAuthGetNextRedirectRequestRequest"}, "OAuthGetNextRedirectResponseRequest": {"properties": {"redirect_url": {"type": "string", "title": "Redirect Url", "description": "The URL that the user needs to be redirected to. If `null`, there is no next redirect."}}, "additionalProperties": false, "type": "object", "title": "OAuthGetNextRedirectResponseRequest"}, "OAuthProviderInfoRequest": {"properties": {"name": {"type": "string", "title": "Name", "description": "The OAuth2 provider name."}, "enabled": {"type": "boolean", "title": "Enabled", "description": "Whether the provider is configured on the server."}}, "additionalProperties": false, "type": "object", "required": ["name", "enabled"], "title": "OAuthProviderInfoRequest"}, "OCIBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["oci"], "title": "Type", "description": "The type of backend", "default": "oci"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of OCI regions. Omit to use all regions"}, "compartment_id": {"type": "string", "title": "Compartment Id", "description": "Compartment where `dstack` will create all resources. Omit to instruct `dstack` to create a new compartment"}}, "additionalProperties": false, "type": "object", "title": "OCIBackendConfigRequest"}, "OCIBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["oci"], "title": "Type", "description": "The type of backend", "default": "oci"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of OCI regions. Omit to use all regions"}, "compartment_id": {"type": "string", "title": "Compartment Id", "description": "Compartment where `dstack` will create all resources. Omit to instruct `dstack` to create a new compartment"}, "creds": {"oneOf": [{"$ref": "#/components/schemas/OCIClientCredsRequest"}, {"$ref": "#/components/schemas/OCIDefaultCredsRequest"}], "title": "Creds", "description": "The credentials", "discriminator": {"propertyName": "type", "mapping": {"client": "#/components/schemas/OCIClientCredsRequest", "default": "#/components/schemas/OCIDefaultCredsRequest"}}}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "OCIBackendConfigWithCredsRequest"}, "OCIClientCredsRequest": {"properties": {"type": {"type": "string", "enum": ["client"], "title": "Type", "description": "The type of credentials", "default": "client"}, "user": {"type": "string", "title": "User", "description": "User OCID"}, "tenancy": {"type": "string", "title": "Tenancy", "description": "Tenancy OCID"}, "key_file": {"type": "string", "title": "Key File", "description": "Path to the user's private PEM key. Either this or `key_content` should be set"}, "key_content": {"type": "string", "title": "Key Content", "description": "Content of the user's private PEM key. Either this or `key_file` should be set"}, "pass_phrase": {"type": "string", "title": "Pass Phrase", "description": "Passphrase for the private PEM key if it is encrypted"}, "fingerprint": {"type": "string", "title": "Fingerprint", "description": "User's public key fingerprint"}, "region": {"type": "string", "title": "Region", "description": "Name or key of any region the tenancy is subscribed to"}}, "additionalProperties": false, "type": "object", "required": ["user", "tenancy", "fingerprint", "region"], "title": "OCIClientCredsRequest"}, "OCIDefaultCredsRequest": {"properties": {"type": {"type": "string", "enum": ["default"], "title": "Type", "description": "The type of credentials", "default": "default"}, "file": {"type": "string", "title": "File", "description": "Path to the OCI CLI-compatible config file", "default": "~/.oci/config"}, "profile": {"type": "string", "title": "Profile", "description": "Profile to load from the config file", "default": "DEFAULT"}}, "additionalProperties": false, "type": "object", "title": "OCIDefaultCredsRequest"}, "OpenAIChatModelRequest": {"properties": {"type": {"type": "string", "enum": ["chat"], "title": "Type", "description": "The type of the model", "default": "chat"}, "name": {"type": "string", "title": "Name", "description": "The name of the model"}, "format": {"type": "string", "enum": ["openai"], "title": "Format", "description": "The serving format. Must be set to `openai`"}, "prefix": {"type": "string", "title": "Prefix", "description": "The `base_url` prefix (after hostname)", "default": "/v1"}}, "additionalProperties": false, "type": "object", "required": ["name", "format"], "title": "OpenAIChatModelRequest", "description": "Mapping of the model for the OpenAI-compatible endpoint.\n\nAttributes:\n type (str): The type of the model, e.g. \"chat\"\n name (str): The name of the model. This name will be used both to load model configuration from the HuggingFace Hub and in the OpenAI-compatible endpoint.\n format (str): The format of the model, i.e. \"openai\".\n prefix (str): The `base_url` prefix: `http://hostname/{prefix}/chat/completions`. Defaults to `/v1`."}, "PollLogsRequestRequest": {"properties": {"run_name": {"type": "string", "title": "Run Name"}, "job_submission_id": {"type": "string", "format": "uuid4", "title": "Job Submission Id"}, "start_time": {"type": "string", "format": "date-time", "title": "Start Time"}, "end_time": {"type": "string", "format": "date-time", "title": "End Time"}, "descending": {"type": "boolean", "title": "Descending", "default": false}, "next_token": {"type": "string", "title": "Next Token"}, "limit": {"type": "integer", "maximum": 1000.0, "minimum": 0.0, "title": "Limit", "default": 100}, "diagnose": {"type": "boolean", "title": "Diagnose", "default": false}}, "additionalProperties": false, "type": "object", "required": ["run_name", "job_submission_id"], "title": "PollLogsRequestRequest"}, "PortMappingRequest": {"properties": {"local_port": {"type": "integer", "maximum": 65536.0, "exclusiveMinimum": 0.0, "title": "Local Port"}, "container_port": {"type": "integer", "maximum": 65536.0, "exclusiveMinimum": 0.0, "title": "Container Port"}}, "additionalProperties": false, "type": "object", "required": ["container_port"], "title": "PortMappingRequest"}, "ProbeConfigRequest": {"properties": {"type": {"type": "string", "enum": ["http"], "title": "Type"}, "url": {"type": "string", "title": "Url", "description": "The URL to request. Defaults to `/`"}, "method": {"type": "string", "enum": ["get", "post", "put", "delete", "patch", "head"], "title": "Method", "description": "The HTTP method to use for the probe (e.g., `get`, `post`, etc.). Defaults to `get`"}, "headers": {"items": {"$ref": "#/components/schemas/HTTPHeaderSpecRequest"}, "type": "array", "maxItems": 16, "title": "Headers", "description": "A list of HTTP headers to include in the request", "default": []}, "body": {"type": "string", "maxLength": 2048, "minLength": 1, "title": "Body", "description": "The HTTP request body to send with the probe"}, "timeout": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Timeout", "description": "Maximum amount of time the HTTP request is allowed to take. Defaults to `10s`"}, "interval": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Interval", "description": "Minimum amount of time between the end of one probe execution and the start of the next. Defaults to `15s`"}, "ready_after": {"type": "integer", "minimum": 1.0, "title": "Ready After", "description": "The number of consecutive successful probe executions required for the replica to be considered ready. Used during rolling deployments. Defaults to `1`"}}, "additionalProperties": false, "type": "object", "required": ["type"], "title": "ProbeConfigRequest"}, "ProbeRequest": {"properties": {"success_streak": {"type": "integer", "title": "Success Streak"}}, "additionalProperties": false, "type": "object", "required": ["success_streak"], "title": "ProbeRequest"}, "ProbeSpecRequest": {"properties": {"type": {"type": "string", "enum": ["http"], "title": "Type"}, "url": {"type": "string", "title": "Url"}, "method": {"type": "string", "enum": ["get", "post", "put", "delete", "patch", "head"], "title": "Method", "default": "get"}, "headers": {"items": {"$ref": "#/components/schemas/HTTPHeaderSpecRequest"}, "type": "array", "title": "Headers", "default": []}, "body": {"type": "string", "title": "Body"}, "timeout": {"type": "integer", "title": "Timeout"}, "interval": {"type": "integer", "title": "Interval"}, "ready_after": {"type": "integer", "title": "Ready After"}}, "additionalProperties": false, "type": "object", "required": ["type", "url", "timeout", "interval", "ready_after"], "title": "ProbeSpecRequest"}, "ProfileRequest": {"properties": {"backends": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array", "description": "The backends to consider for provisioning (e.g., `[aws, gcp]`)"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The regions to consider for provisioning (e.g., `[eu-west-1, us-west4, westeurope]`)"}, "availability_zones": {"items": {"type": "string"}, "type": "array", "title": "Availability Zones", "description": "The availability zones to consider for provisioning (e.g., `[eu-west-1a, us-west4-a]`)"}, "instance_types": {"items": {"type": "string"}, "type": "array", "title": "Instance Types", "description": "The cloud-specific instance types to consider for provisioning (e.g., `[p3.8xlarge, n1-standard-4]`)"}, "reservation": {"type": "string", "title": "Reservation", "description": "The existing reservation to use for instance provisioning. Supports AWS Capacity Reservations, AWS Capacity Blocks, and GCP reservations"}, "spot_policy": {"allOf": [{"$ref": "#/components/schemas/SpotPolicy"}], "description": "The policy for provisioning spot or on-demand instances: `spot`, `on-demand`, `auto`. Defaults to `on-demand`"}, "retry": {"anyOf": [{"$ref": "#/components/schemas/ProfileRetryRequest"}, {"type": "boolean"}], "title": "Retry", "description": "The policy for resubmitting the run. Defaults to `false`"}, "max_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Max Duration", "description": "The maximum duration of a run (e.g., `2h`, `1d`, etc) in a running state, excluding provisioning and pulling. After it elapses, the run is automatically stopped. Use `off` for unlimited duration. Defaults to `off`"}, "stop_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Stop Duration", "description": "The maximum duration of a run graceful stopping. After it elapses, the run is automatically forced stopped. This includes force detaching volumes used by the run. Use `off` for unlimited duration. Defaults to `5m`"}, "max_price": {"type": "number", "exclusiveMinimum": 0.0, "title": "Max Price", "description": "The maximum instance price per hour, in dollars"}, "creation_policy": {"allOf": [{"$ref": "#/components/schemas/CreationPolicy"}], "description": "The policy for using instances from fleets: `reuse`, `reuse-or-create`. Defaults to `reuse-or-create`"}, "idle_duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Idle Duration", "description": "Time to wait before terminating idle instances. Instances are not terminated if the fleet is already at `nodes.min`. Defaults to `5m` for runs and `3d` for fleets. Use `off` for unlimited duration"}, "utilization_policy": {"allOf": [{"$ref": "#/components/schemas/UtilizationPolicyRequest"}], "title": "Utilization Policy", "description": "Run termination policy based on utilization"}, "startup_order": {"allOf": [{"$ref": "#/components/schemas/StartupOrder"}], "description": "The order in which master and workers jobs are started: `any`, `master-first`, `workers-first`. Defaults to `any`"}, "stop_criteria": {"allOf": [{"$ref": "#/components/schemas/StopCriteria"}], "description": "The criteria determining when a multi-node run should be considered finished: `all-done`, `master-done`. Defaults to `all-done`"}, "schedule": {"allOf": [{"$ref": "#/components/schemas/ScheduleRequest"}], "title": "Schedule", "description": "The schedule for starting the run at specified time"}, "fleets": {"items": {"type": "string"}, "type": "array", "title": "Fleets", "description": "The fleets considered for reuse"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the resource. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}, "name": {"type": "string", "title": "Name", "description": "The name of the profile that can be passed as `--profile` to `dstack apply`", "default": ""}, "default": {"type": "boolean", "title": "Default", "description": "If set to true, `dstack apply` will use this profile by default.", "default": false}}, "additionalProperties": false, "type": "object", "title": "ProfileRequest"}, "ProfileRetryRequest": {"properties": {"on_events": {"items": {"$ref": "#/components/schemas/RetryEvent"}, "type": "array", "description": "The list of events that should be handled with retry. Supported events are `no-capacity`, `interruption`, `error`. Omit to retry on all events"}, "duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Duration", "description": "The maximum period of retrying the run, e.g., `4h` or `1d`. The period is calculated as a run age for `no-capacity` event and as a time passed since the last `interruption` and `error` for `interruption` and `error` events."}}, "additionalProperties": false, "type": "object", "title": "ProfileRetryRequest"}, "ProjectRequest": {"properties": {"project_id": {"type": "string", "format": "uuid4", "title": "Project Id"}, "project_name": {"type": "string", "title": "Project Name"}, "owner": {"$ref": "#/components/schemas/UserRequest"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "backends": {"items": {"$ref": "#/components/schemas/BackendInfoRequest"}, "type": "array", "title": "Backends"}, "members": {"items": {"$ref": "#/components/schemas/MemberRequest"}, "type": "array", "title": "Members"}, "is_public": {"type": "boolean", "title": "Is Public", "default": false}}, "additionalProperties": false, "type": "object", "required": ["project_id", "project_name", "owner", "backends", "members"], "title": "ProjectRequest"}, "ProjectRole": {"type": "string", "enum": ["admin", "manager", "user"], "title": "ProjectRole", "description": "An enumeration."}, "ProjectsInfoListRequest": {"properties": {"total_count": {"type": "integer", "title": "Total Count"}, "projects": {"items": {"$ref": "#/components/schemas/ProjectRequest"}, "type": "array", "title": "Projects"}}, "additionalProperties": false, "type": "object", "required": ["projects"], "title": "ProjectsInfoListRequest"}, "PythonVersion": {"type": "string", "enum": ["3.9", "3.10", "3.11", "3.12", "3.13"], "title": "PythonVersion", "description": "An enumeration."}, "Range_Memory_": {"properties": {"min": {"type": "number", "title": "Min"}, "max": {"type": "number", "title": "Max"}}, "additionalProperties": false, "type": "object", "title": "Range[Memory]"}, "Range_float_": {"properties": {"min": {"type": "number", "title": "Min"}, "max": {"type": "number", "title": "Max"}}, "additionalProperties": false, "type": "object", "title": "Range[float]"}, "Range_int_": {"properties": {"min": {"type": "integer", "title": "Min"}, "max": {"type": "integer", "title": "Max"}}, "additionalProperties": false, "type": "object", "title": "Range[int]"}, "RateLimitRequest": {"properties": {"prefix": {"type": "string", "maxLength": 4094, "pattern": "^/[^\\s\\\\{}]*$", "title": "Prefix", "description": "URL path prefix to which this limit is applied. If an incoming request matches several prefixes, the longest prefix is applied", "default": "/"}, "key": {"oneOf": [{"$ref": "#/components/schemas/IPAddressPartitioningKeyRequest"}, {"$ref": "#/components/schemas/HeaderPartitioningKeyRequest"}], "title": "Key", "description": "The partitioning key. Each incoming request belongs to a partition and rate limits are applied per partition. Defaults to partitioning by client IP address", "default": {"type": "ip_address"}, "discriminator": {"propertyName": "type", "mapping": {"ip_address": "#/components/schemas/IPAddressPartitioningKeyRequest", "header": "#/components/schemas/HeaderPartitioningKeyRequest"}}}, "rps": {"type": "number", "maximum": 1.5372286728091293e+17, "minimum": 0.016666666666666666, "title": "Rps", "description": "Max allowed number of requests per second. Requests are tracked at millisecond granularity. For example, `rps: 10` means at most 1 request per 100ms"}, "burst": {"type": "integer", "maximum": 9.223372036854776e+18, "minimum": 0.0, "title": "Burst", "description": "Max number of requests that can be passed to the service ahead of the rate limit", "default": 0}}, "additionalProperties": false, "type": "object", "required": ["rps"], "title": "RateLimitRequest"}, "RefreshTokenRequestRequest": {"properties": {"username": {"type": "string", "title": "Username"}}, "additionalProperties": false, "type": "object", "required": ["username"], "title": "RefreshTokenRequestRequest"}, "RegistryAuthRequest": {"properties": {"username": {"type": "string", "title": "Username", "description": "The username"}, "password": {"type": "string", "title": "Password", "description": "The password or access token"}}, "additionalProperties": false, "type": "object", "required": ["username", "password"], "title": "RegistryAuthRequest", "description": "Credentials for pulling a private Docker image.\n\nAttributes:\n username (str): The username\n password (str): The password or access token"}, "RemoteRepoCredsRequest": {"properties": {"clone_url": {"type": "string", "title": "Clone Url"}, "private_key": {"type": "string", "title": "Private Key"}, "oauth_token": {"type": "string", "title": "Oauth Token"}}, "additionalProperties": false, "type": "object", "required": ["clone_url"], "title": "RemoteRepoCredsRequest"}, "RemoteRepoInfoRequest": {"properties": {"repo_type": {"type": "string", "enum": ["remote"], "title": "Repo Type", "default": "remote"}, "repo_name": {"type": "string", "title": "Repo Name"}}, "additionalProperties": false, "type": "object", "required": ["repo_name"], "title": "RemoteRepoInfoRequest"}, "RemoteRunRepoDataRequest": {"properties": {"repo_type": {"type": "string", "enum": ["remote"], "title": "Repo Type", "default": "remote"}, "repo_name": {"type": "string", "title": "Repo Name"}, "repo_branch": {"type": "string", "title": "Repo Branch"}, "repo_hash": {"type": "string", "title": "Repo Hash"}, "repo_diff": {"type": "string", "title": "Repo Diff"}, "repo_config_name": {"type": "string", "title": "Repo Config Name"}, "repo_config_email": {"type": "string", "title": "Repo Config Email"}}, "additionalProperties": false, "type": "object", "required": ["repo_name"], "title": "RemoteRunRepoDataRequest"}, "RemoveProjectMemberRequestRequest": {"properties": {"usernames": {"items": {"type": "string"}, "type": "array", "title": "Usernames"}}, "additionalProperties": false, "type": "object", "required": ["usernames"], "title": "RemoveProjectMemberRequestRequest"}, "ReplicaGroupRequest": {"properties": {"name": {"type": "string", "title": "Name", "description": "The name of the replica group. If not provided, defaults to '0', '1', etc. based on position."}, "count": {"allOf": [{"$ref": "#/components/schemas/Range_int_"}], "title": "Count", "description": "The number of replicas. Can be a number (e.g. `2`) or a range (`0..4` or `1..8`). If it's a range, the `scaling` property is required"}, "scaling": {"allOf": [{"$ref": "#/components/schemas/ScalingSpecRequest"}], "title": "Scaling", "description": "The auto-scaling rules. Required if `count` is set to a range"}, "resources": {"allOf": [{"$ref": "#/components/schemas/ResourcesSpecRequest"}], "title": "Resources", "description": "The resources requirements for replicas in this group", "default": {"cpu": {"min": 2}, "memory": {"min": 8.0}, "disk": {"size": {"min": 100.0}}}}, "commands": {"items": {"type": "string"}, "type": "array", "title": "Commands", "description": "The shell commands to run for replicas in this group", "default": []}}, "additionalProperties": false, "type": "object", "required": ["count"], "title": "ReplicaGroupRequest"}, "RepoExistsAction": {"type": "string", "enum": ["error", "skip"], "title": "RepoExistsAction", "description": "An enumeration."}, "RepoHeadRequest": {"properties": {"repo_id": {"type": "string", "title": "Repo Id"}, "repo_info": {"oneOf": [{"$ref": "#/components/schemas/RemoteRepoInfoRequest"}, {"$ref": "#/components/schemas/LocalRepoInfoRequest"}, {"$ref": "#/components/schemas/VirtualRepoInfoRequest"}], "title": "Repo Info", "discriminator": {"propertyName": "repo_type", "mapping": {"remote": "#/components/schemas/RemoteRepoInfoRequest", "local": "#/components/schemas/LocalRepoInfoRequest", "virtual": "#/components/schemas/VirtualRepoInfoRequest"}}}}, "additionalProperties": false, "type": "object", "required": ["repo_id", "repo_info"], "title": "RepoHeadRequest"}, "RepoHeadWithCredsRequest": {"properties": {"repo_id": {"type": "string", "title": "Repo Id"}, "repo_info": {"oneOf": [{"$ref": "#/components/schemas/RemoteRepoInfoRequest"}, {"$ref": "#/components/schemas/LocalRepoInfoRequest"}, {"$ref": "#/components/schemas/VirtualRepoInfoRequest"}], "title": "Repo Info", "discriminator": {"propertyName": "repo_type", "mapping": {"remote": "#/components/schemas/RemoteRepoInfoRequest", "local": "#/components/schemas/LocalRepoInfoRequest", "virtual": "#/components/schemas/VirtualRepoInfoRequest"}}}, "repo_creds": {"$ref": "#/components/schemas/RemoteRepoCredsRequest"}}, "additionalProperties": false, "type": "object", "required": ["repo_id", "repo_info"], "title": "RepoHeadWithCredsRequest"}, "RepoSpecRequest": {"properties": {"local_path": {"type": "string", "title": "Local Path", "description": "The path to the Git repo on the user's machine. Relative paths are resolved relative to the parent directory of the the configuration file. Mutually exclusive with `url`"}, "url": {"type": "string", "title": "Url", "description": "The Git repo URL. Mutually exclusive with `local_path`"}, "branch": {"type": "string", "title": "Branch", "description": "The repo branch. Defaults to the active branch for local paths and the default branch for URLs"}, "hash": {"type": "string", "title": "Hash", "description": "The commit hash"}, "path": {"type": "string", "title": "Path", "description": "The repo path inside the run container. Relative paths are resolved relative to the working directory", "default": "."}, "if_exists": {"allOf": [{"$ref": "#/components/schemas/RepoExistsAction"}], "description": "The action to be taken if `path` exists and is not empty. One of: `error`, `skip`", "default": "error"}}, "additionalProperties": false, "type": "object", "title": "RepoSpecRequest"}, "RequirementsRequest": {"properties": {"resources": {"$ref": "#/components/schemas/ResourcesSpecRequest"}, "max_price": {"type": "number", "title": "Max Price"}, "spot": {"type": "boolean", "title": "Spot"}, "reservation": {"type": "string", "title": "Reservation"}, "multinode": {"type": "boolean", "title": "Multinode"}}, "additionalProperties": false, "type": "object", "required": ["resources"], "title": "RequirementsRequest"}, "ResourcesRequest": {"properties": {"cpus": {"type": "integer", "title": "Cpus"}, "memory_mib": {"type": "integer", "title": "Memory Mib"}, "gpus": {"items": {"$ref": "#/components/schemas/GpuRequest"}, "type": "array", "title": "Gpus"}, "spot": {"type": "boolean", "title": "Spot"}, "disk": {"allOf": [{"$ref": "#/components/schemas/DiskRequest"}], "title": "Disk", "default": {"size_mib": 102400}}, "cpu_arch": {"$ref": "#/components/schemas/CPUArchitecture"}, "description": {"type": "string", "title": "Description", "default": ""}}, "additionalProperties": false, "type": "object", "required": ["cpus", "memory_mib", "gpus", "spot"], "title": "ResourcesRequest"}, "ResourcesSpecRequest": {"properties": {"cpu": {"anyOf": [{"$ref": "#/components/schemas/CPUSpecRequest"}, {"$ref": "#/components/schemas/Range_int_"}, {"type": "integer"}, {"type": "string"}], "title": "Cpu", "description": "The CPU requirements", "default": {"count": {"min": 2}}}, "memory": {"anyOf": [{"$ref": "#/components/schemas/Range_Memory_"}, {"type": "integer"}, {"type": "string"}], "title": "Memory", "description": "The RAM size (e.g., `8GB`)", "default": {"min": 8.0}}, "shm_size": {"anyOf": [{"type": "number"}, {"type": "integer"}, {"type": "string"}], "title": "Shm Size", "description": "The size of shared memory (e.g., `8GB`). If you are using parallel communicating processes (e.g., dataloaders in PyTorch), you may need to configure this"}, "gpu": {"anyOf": [{"$ref": "#/components/schemas/GPUSpecRequest"}, {"type": "integer"}, {"type": "string"}], "title": "Gpu", "description": "The GPU requirements"}, "disk": {"anyOf": [{"$ref": "#/components/schemas/DiskSpecRequest"}, {"type": "integer"}, {"type": "string"}], "title": "Disk", "description": "The disk resources", "default": {"size": {"min": 100.0}}}}, "additionalProperties": false, "type": "object", "title": "ResourcesSpecRequest"}, "RetryEvent": {"type": "string", "enum": ["no-capacity", "interruption", "error"], "title": "RetryEvent", "description": "An enumeration."}, "RetryRequest": {"properties": {"on_events": {"items": {"$ref": "#/components/schemas/RetryEvent"}, "type": "array"}, "duration": {"type": "integer", "title": "Duration"}}, "additionalProperties": false, "type": "object", "required": ["on_events", "duration"], "title": "RetryRequest"}, "RunFleetRequest": {"properties": {"id": {"type": "string", "format": "uuid4", "title": "Id"}, "name": {"type": "string", "title": "Name"}}, "additionalProperties": false, "type": "object", "required": ["id", "name"], "title": "RunFleetRequest"}, "RunPlanRequest": {"properties": {"project_name": {"type": "string", "title": "Project Name"}, "user": {"type": "string", "title": "User"}, "run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}, "effective_run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}, "job_plans": {"items": {"$ref": "#/components/schemas/JobPlanRequest"}, "type": "array", "title": "Job Plans"}, "current_resource": {"$ref": "#/components/schemas/RunRequest"}, "action": {"$ref": "#/components/schemas/ApplyAction"}}, "additionalProperties": false, "type": "object", "required": ["project_name", "user", "run_spec", "job_plans", "action"], "title": "RunPlanRequest"}, "RunRequest": {"properties": {"id": {"type": "string", "format": "uuid4", "title": "Id"}, "project_name": {"type": "string", "title": "Project Name"}, "user": {"type": "string", "title": "User"}, "fleet": {"$ref": "#/components/schemas/RunFleetRequest"}, "submitted_at": {"type": "string", "format": "date-time", "title": "Submitted At"}, "last_processed_at": {"type": "string", "format": "date-time", "title": "Last Processed At"}, "status": {"$ref": "#/components/schemas/RunStatus"}, "status_message": {"type": "string", "title": "Status Message", "default": ""}, "termination_reason": {"type": "string", "title": "Termination Reason"}, "run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}, "jobs": {"items": {"$ref": "#/components/schemas/JobRequest"}, "type": "array", "title": "Jobs"}, "latest_job_submission": {"$ref": "#/components/schemas/JobSubmissionRequest"}, "cost": {"type": "number", "title": "Cost", "default": 0}, "service": {"$ref": "#/components/schemas/ServiceSpecRequest"}, "deployment_num": {"type": "integer", "title": "Deployment Num", "default": 0}, "error": {"type": "string", "title": "Error"}, "deleted": {"type": "boolean", "title": "Deleted"}, "next_triggered_at": {"type": "string", "format": "date-time", "title": "Next Triggered At"}}, "additionalProperties": false, "type": "object", "required": ["id", "project_name", "user", "submitted_at", "last_processed_at", "status", "run_spec", "jobs"], "title": "RunRequest"}, "RunSpecRequest": {"properties": {"run_name": {"type": "string", "title": "Run Name", "description": "The run name. If not set, the run name is generated automatically."}, "repo_id": {"type": "string", "title": "Repo Id", "description": "Same `repo_id` that is specified when initializing the repo by calling the `/api/project/{project_name}/repos/init` endpoint. If not specified, a default virtual repo is used."}, "repo_data": {"oneOf": [{"$ref": "#/components/schemas/RemoteRunRepoDataRequest"}, {"$ref": "#/components/schemas/LocalRunRepoDataRequest"}, {"$ref": "#/components/schemas/VirtualRunRepoDataRequest"}], "title": "Repo Data", "description": "The repo data such as the current branch and commit.", "discriminator": {"propertyName": "repo_type", "mapping": {"remote": "#/components/schemas/RemoteRunRepoDataRequest", "local": "#/components/schemas/LocalRunRepoDataRequest", "virtual": "#/components/schemas/VirtualRunRepoDataRequest"}}}, "repo_code_hash": {"type": "string", "title": "Repo Code Hash", "description": "The hash of the repo diff. Can be omitted if there is no repo diff."}, "repo_dir": {"type": "string", "title": "Repo Dir", "description": "The repo path inside the container. Relative paths are resolved relative to the working directory."}, "file_archives": {"items": {"$ref": "#/components/schemas/FileArchiveMappingRequest"}, "type": "array", "title": "File Archives", "description": "The list of file archive ID to container path mappings.", "default": []}, "working_dir": {"type": "string", "title": "Working Dir"}, "configuration_path": {"type": "string", "title": "Configuration Path", "description": "The path to the run configuration YAML file. It can be omitted when using the programmatic API."}, "configuration": {"oneOf": [{"$ref": "#/components/schemas/DevEnvironmentConfigurationRequest"}, {"$ref": "#/components/schemas/TaskConfigurationRequest"}, {"$ref": "#/components/schemas/ServiceConfigurationRequest"}], "title": "Configuration", "discriminator": {"propertyName": "type", "mapping": {"dev-environment": "#/components/schemas/DevEnvironmentConfigurationRequest", "task": "#/components/schemas/TaskConfigurationRequest", "service": "#/components/schemas/ServiceConfigurationRequest"}}}, "profile": {"allOf": [{"$ref": "#/components/schemas/ProfileRequest"}], "title": "Profile", "description": "The profile parameters"}, "ssh_key_pub": {"type": "string", "title": "Ssh Key Pub", "description": "The contents of the SSH public key that will be used to connect to the run. Can be empty only before the run is submitted."}}, "additionalProperties": false, "type": "object", "required": ["configuration"], "title": "RunSpecRequest"}, "RunStatus": {"type": "string", "enum": ["pending", "submitted", "provisioning", "running", "terminating", "terminated", "failed", "done"], "title": "RunStatus", "description": "An enumeration."}, "RunpodAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "RunpodAPIKeyCredsRequest"}, "RunpodBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["runpod"], "title": "Type", "default": "runpod"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of RunPod regions. Omit to use all regions"}, "community_cloud": {"type": "boolean", "title": "Community Cloud", "description": "Whether Community Cloud offers can be suggested in addition to Secure Cloud. Defaults to `true`"}}, "additionalProperties": false, "type": "object", "title": "RunpodBackendConfigRequest"}, "RunpodBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["runpod"], "title": "Type", "default": "runpod"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of RunPod regions. Omit to use all regions"}, "community_cloud": {"type": "boolean", "title": "Community Cloud", "description": "Whether Community Cloud offers can be suggested in addition to Secure Cloud. Defaults to `true`"}, "creds": {"allOf": [{"$ref": "#/components/schemas/RunpodAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "RunpodBackendConfigWithCredsRequest"}, "SGLangRouterConfigRequest": {"properties": {"type": {"type": "string", "enum": ["sglang"], "title": "Type", "description": "The router type", "default": "sglang"}, "policy": {"type": "string", "enum": ["random", "round_robin", "cache_aware", "power_of_two"], "title": "Policy", "description": "The routing policy. Options: `random`, `round_robin`, `cache_aware`, `power_of_two`", "default": "cache_aware"}}, "additionalProperties": false, "type": "object", "title": "SGLangRouterConfigRequest"}, "SSHConnectionParamsRequest": {"properties": {"hostname": {"type": "string", "title": "Hostname"}, "username": {"type": "string", "title": "Username"}, "port": {"type": "integer", "title": "Port"}}, "additionalProperties": false, "type": "object", "required": ["hostname", "username", "port"], "title": "SSHConnectionParamsRequest"}, "SSHHostParamsRequest": {"properties": {"hostname": {"type": "string", "title": "Hostname", "description": "The IP address or domain to connect to"}, "port": {"type": "integer", "title": "Port", "description": "The SSH port to connect to for this host"}, "user": {"type": "string", "title": "User", "description": "The user to log in with for this host"}, "identity_file": {"type": "string", "title": "Identity File", "description": "The private key to use for this host"}, "proxy_jump": {"allOf": [{"$ref": "#/components/schemas/SSHProxyParamsRequest"}], "title": "Proxy Jump", "description": "The SSH proxy configuration for this host"}, "internal_ip": {"type": "string", "title": "Internal Ip", "description": "The internal IP of the host used for communication inside the cluster. If not specified, `dstack` will use the IP address from `network` or from the first found internal network."}, "ssh_key": {"$ref": "#/components/schemas/SSHKeyRequest"}, "blocks": {"anyOf": [{"type": "string", "enum": ["auto"]}, {"type": "integer", "minimum": 1.0}], "title": "Blocks", "description": "The amount of blocks to split the instance into, a number or `auto`. `auto` means as many as possible. The number of GPUs and CPUs must be divisible by the number of blocks. Defaults to `1`, i.e. do not split", "default": 1}}, "additionalProperties": false, "type": "object", "required": ["hostname"], "title": "SSHHostParamsRequest"}, "SSHKeyRequest": {"properties": {"public": {"type": "string", "title": "Public"}, "private": {"type": "string", "title": "Private"}}, "additionalProperties": false, "type": "object", "required": ["public"], "title": "SSHKeyRequest"}, "SSHParamsRequest": {"properties": {"user": {"type": "string", "title": "User", "description": "The user to log in with on all hosts"}, "port": {"type": "integer", "title": "Port", "description": "The SSH port to connect to"}, "identity_file": {"type": "string", "title": "Identity File", "description": "The private key to use for all hosts"}, "ssh_key": {"$ref": "#/components/schemas/SSHKeyRequest"}, "proxy_jump": {"allOf": [{"$ref": "#/components/schemas/SSHProxyParamsRequest"}], "title": "Proxy Jump", "description": "The SSH proxy configuration for all hosts"}, "hosts": {"items": {"anyOf": [{"$ref": "#/components/schemas/SSHHostParamsRequest"}, {"type": "string"}]}, "type": "array", "title": "Hosts", "description": "The per host connection parameters: a hostname or an object that overrides default ssh parameters"}, "network": {"type": "string", "title": "Network", "description": "The network address for cluster setup in the format `/`. `dstack` will use IP addresses from this network for communication between hosts. If not specified, `dstack` will use IPs from the first found internal network."}}, "additionalProperties": false, "type": "object", "required": ["hosts"], "title": "SSHParamsRequest"}, "SSHProxyParamsRequest": {"properties": {"hostname": {"type": "string", "title": "Hostname", "description": "The IP address or domain of proxy host"}, "port": {"type": "integer", "title": "Port", "description": "The SSH port of proxy host"}, "user": {"type": "string", "title": "User", "description": "The user to log in with for proxy host"}, "identity_file": {"type": "string", "title": "Identity File", "description": "The private key to use for proxy host"}, "ssh_key": {"$ref": "#/components/schemas/SSHKeyRequest"}}, "additionalProperties": false, "type": "object", "required": ["hostname", "user", "identity_file"], "title": "SSHProxyParamsRequest"}, "SaveRepoCredsRequestRequest": {"properties": {"repo_id": {"type": "string", "title": "Repo Id", "description": "A unique identifier of the repo"}, "repo_info": {"anyOf": [{"$ref": "#/components/schemas/RemoteRepoInfoRequest"}, {"$ref": "#/components/schemas/LocalRepoInfoRequest"}, {"$ref": "#/components/schemas/VirtualRepoInfoRequest"}], "title": "Repo Info"}, "repo_creds": {"allOf": [{"$ref": "#/components/schemas/RemoteRepoCredsRequest"}], "title": "Repo Creds", "description": "The repo creds for accessing private remote repo"}}, "additionalProperties": false, "type": "object", "required": ["repo_id", "repo_info"], "title": "SaveRepoCredsRequestRequest"}, "ScalingSpecRequest": {"properties": {"metric": {"type": "string", "enum": ["rps"], "title": "Metric", "description": "The target metric to track. Currently, the only supported value is `rps` (meaning requests per second)"}, "target": {"type": "number", "exclusiveMinimum": 0.0, "title": "Target", "description": "The target value of the metric. The number of replicas is calculated based on this number and automatically adjusts (scales up or down) as this metric changes"}, "scale_up_delay": {"type": "integer", "title": "Scale Up Delay", "description": "The delay in seconds before scaling up", "default": 300}, "scale_down_delay": {"type": "integer", "title": "Scale Down Delay", "description": "The delay in seconds before scaling down", "default": 600}}, "additionalProperties": false, "type": "object", "required": ["metric", "target"], "title": "ScalingSpecRequest"}, "ScheduleRequest": {"properties": {"cron": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "string"}], "title": "Cron", "description": "A cron expression or a list of cron expressions specifying the UTC time when the run needs to be started"}}, "additionalProperties": false, "type": "object", "required": ["cron"], "title": "ScheduleRequest"}, "SecretRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "name": {"type": "string", "title": "Name"}, "value": {"type": "string", "title": "Value"}}, "additionalProperties": false, "type": "object", "required": ["id", "name"], "title": "SecretRequest"}, "ServerClientErrorCode": {"type": "string", "enum": ["error", "resource_exists", "resource_not_exists", "invalid_credentials", "backend_not_available", "repo_does_not_exist", "gateway_error"], "title": "ServerClientErrorCode", "description": "An enumeration."}, "ServerInfoRequest": {"properties": {"server_version": {"type": "string", "title": "Server Version"}}, "additionalProperties": false, "type": "object", "title": "ServerInfoRequest"}, "ServiceConfigurationRequest": {"properties": {"port": {"anyOf": [{"type": "integer", "maximum": 65536.0, "exclusiveMinimum": 0.0}, {"type": "string", "pattern": "^[0-9]+:[0-9]+$"}, {"$ref": "#/components/schemas/PortMappingRequest"}], "title": "Port", "description": "The port the application listens on"}, "gateway": {"anyOf": [{"type": "boolean"}, {"type": "string"}], "title": "Gateway", "description": "The name of the gateway. Specify boolean `false` to run without a gateway. Specify boolean `true` to run with the default gateway. Omit to run with the default gateway if there is one, or without a gateway otherwise"}, "strip_prefix": {"type": "boolean", "title": "Strip Prefix", "description": "Strip the `/proxy/services///` path prefix when forwarding requests to the service. Only takes effect when running the service without a gateway", "default": true}, "model": {"anyOf": [{"$ref": "#/components/schemas/TGIChatModelRequest"}, {"$ref": "#/components/schemas/OpenAIChatModelRequest"}, {"type": "string"}], "title": "Model", "description": "Mapping of the model for the OpenAI-compatible endpoint provided by `dstack`. Can be a full model format definition or just a model name. If it's a name, the service is expected to expose an OpenAI-compatible API at the `/v1` path"}, "https": {"type": "boolean", "title": "Https", "description": "Enable HTTPS if running with a gateway", "default": true}, "auth": {"type": "boolean", "title": "Auth", "description": "Enable the authorization", "default": true}, "scaling": {"allOf": [{"$ref": "#/components/schemas/ScalingSpecRequest"}], "title": "Scaling", "description": "The auto-scaling rules. Required if `replicas` is set to a range"}, "rate_limits": {"items": {"$ref": "#/components/schemas/RateLimitRequest"}, "type": "array", "title": "Rate Limits", "description": "Rate limiting rules", "default": []}, "probes": {"items": {"$ref": "#/components/schemas/ProbeConfigRequest"}, "type": "array", "title": "Probes", "description": "List of probes used to determine job health", "default": []}, "replicas": {"anyOf": [{"items": {"$ref": "#/components/schemas/ReplicaGroupRequest"}, "type": "array"}, {"$ref": "#/components/schemas/Range_int_"}, {"type": "integer"}, {"type": "string"}], "title": "Replicas", "description": "The number of replicas or a list of replica groups. Can be an integer (e.g., `2`), a range (e.g., `0..4`), or a list of replica groups. Each replica group defines replicas with shared configuration (commands, resources, scaling). When `replicas` is a list of replica groups, top-level `scaling`, `commands`, and `resources` are not allowed and must be specified in each replica group instead. "}, "commands": {"items": {"type": "string"}, "type": "array", "title": "Commands", "description": "The shell commands to run", "default": []}, "type": {"type": "string", "enum": ["service"], "title": "Type", "default": "service"}, "name": {"type": "string", "title": "Name", "description": "The run name. If not specified, a random name is generated"}, "image": {"type": "string", "title": "Image", "description": "The name of the Docker image to run"}, "user": {"type": "string", "title": "User", "description": "The user inside the container, `user_name_or_id[:group_name_or_id]` (e.g., `ubuntu`, `1000:1000`). Defaults to the default user from the `image`"}, "privileged": {"type": "boolean", "title": "Privileged", "description": "Run the container in privileged mode", "default": false}, "entrypoint": {"type": "string", "title": "Entrypoint", "description": "The Docker entrypoint"}, "working_dir": {"type": "string", "title": "Working Dir", "description": "The absolute path to the working directory inside the container. Defaults to the `image`'s default working directory"}, "home_dir": {"type": "string", "title": "Home Dir", "default": "/root"}, "registry_auth": {"allOf": [{"$ref": "#/components/schemas/RegistryAuthRequest"}], "title": "Registry Auth", "description": "Credentials for pulling a private Docker image"}, "python": {"allOf": [{"$ref": "#/components/schemas/PythonVersion"}], "description": "The major version of Python. Mutually exclusive with `image` and `docker`"}, "nvcc": {"type": "boolean", "title": "Nvcc", "description": "Use image with NVIDIA CUDA Compiler (NVCC) included. Mutually exclusive with `image` and `docker`"}, "single_branch": {"type": "boolean", "title": "Single Branch", "description": "Whether to clone and track only the current branch or all remote branches. Relevant only when using remote Git repos. Defaults to `false` for dev environments and to `true` for tasks and services"}, "env": {"allOf": [{"$ref": "#/components/schemas/Env"}], "title": "Env", "description": "The mapping or the list of environment variables", "default": {"__root__": {}}}, "shell": {"type": "string", "title": "Shell", "description": "The shell used to run commands. Allowed values are `sh`, `bash`, or an absolute path, e.g., `/usr/bin/zsh`. Defaults to `/bin/sh` if the `image` is specified, `/bin/bash` otherwise"}, "resources": {"allOf": [{"$ref": "#/components/schemas/ResourcesSpecRequest"}], "title": "Resources", "description": "The resources requirements to run the configuration", "default": {"cpu": {"min": 2}, "memory": {"min": 8.0}, "disk": {"size": {"min": 100.0}}}}, "priority": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Priority", "description": "The priority of the run, an integer between `0` and `100`. `dstack` tries to provision runs with higher priority first. Defaults to `0`"}, "volumes": {"items": {"anyOf": [{"$ref": "#/components/schemas/VolumeMountPointRequest"}, {"$ref": "#/components/schemas/InstanceMountPointRequest"}, {"type": "string"}]}, "type": "array", "title": "Volumes", "description": "The volumes mount points", "default": []}, "docker": {"type": "boolean", "title": "Docker", "description": "Use Docker inside the container. Mutually exclusive with `image`, `python`, and `nvcc`. Overrides `privileged`"}, "repos": {"items": {"$ref": "#/components/schemas/RepoSpecRequest"}, "type": "array", "title": "Repos", "description": "The list of Git repos", "default": []}, "files": {"items": {"anyOf": [{"$ref": "#/components/schemas/FilePathMappingRequest"}, {"type": "string"}]}, "type": "array", "title": "Files", "description": "The local to container file path mappings", "default": []}, "setup": {"items": {"type": "string"}, "type": "array", "title": "Setup", "default": []}, "backends": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array", "description": "The backends to consider for provisioning (e.g., `[aws, gcp]`)"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The regions to consider for provisioning (e.g., `[eu-west-1, us-west4, westeurope]`)"}, "availability_zones": {"items": {"type": "string"}, "type": "array", "title": "Availability Zones", "description": "The availability zones to consider for provisioning (e.g., `[eu-west-1a, us-west4-a]`)"}, "instance_types": {"items": {"type": "string"}, "type": "array", "title": "Instance Types", "description": "The cloud-specific instance types to consider for provisioning (e.g., `[p3.8xlarge, n1-standard-4]`)"}, "reservation": {"type": "string", "title": "Reservation", "description": "The existing reservation to use for instance provisioning. Supports AWS Capacity Reservations, AWS Capacity Blocks, and GCP reservations"}, "spot_policy": {"allOf": [{"$ref": "#/components/schemas/SpotPolicy"}], "description": "The policy for provisioning spot or on-demand instances: `spot`, `on-demand`, `auto`. Defaults to `on-demand`"}, "retry": {"anyOf": [{"$ref": "#/components/schemas/ProfileRetryRequest"}, {"type": "boolean"}], "title": "Retry", "description": "The policy for resubmitting the run. Defaults to `false`"}, "max_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Max Duration", "description": "The maximum duration of a run (e.g., `2h`, `1d`, etc) in a running state, excluding provisioning and pulling. After it elapses, the run is automatically stopped. Use `off` for unlimited duration. Defaults to `off`"}, "stop_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Stop Duration", "description": "The maximum duration of a run graceful stopping. After it elapses, the run is automatically forced stopped. This includes force detaching volumes used by the run. Use `off` for unlimited duration. Defaults to `5m`"}, "max_price": {"type": "number", "exclusiveMinimum": 0.0, "title": "Max Price", "description": "The maximum instance price per hour, in dollars"}, "creation_policy": {"allOf": [{"$ref": "#/components/schemas/CreationPolicy"}], "description": "The policy for using instances from fleets: `reuse`, `reuse-or-create`. Defaults to `reuse-or-create`"}, "idle_duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Idle Duration", "description": "Time to wait before terminating idle instances. Instances are not terminated if the fleet is already at `nodes.min`. Defaults to `5m` for runs and `3d` for fleets. Use `off` for unlimited duration"}, "utilization_policy": {"allOf": [{"$ref": "#/components/schemas/UtilizationPolicyRequest"}], "title": "Utilization Policy", "description": "Run termination policy based on utilization"}, "startup_order": {"allOf": [{"$ref": "#/components/schemas/StartupOrder"}], "description": "The order in which master and workers jobs are started: `any`, `master-first`, `workers-first`. Defaults to `any`"}, "stop_criteria": {"allOf": [{"$ref": "#/components/schemas/StopCriteria"}], "description": "The criteria determining when a multi-node run should be considered finished: `all-done`, `master-done`. Defaults to `all-done`"}, "schedule": {"allOf": [{"$ref": "#/components/schemas/ScheduleRequest"}], "title": "Schedule", "description": "The schedule for starting the run at specified time"}, "fleets": {"items": {"type": "string"}, "type": "array", "title": "Fleets", "description": "The fleets considered for reuse"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the resource. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}}, "additionalProperties": false, "type": "object", "required": ["port"], "title": "ServiceConfigurationRequest"}, "ServiceModelSpecRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "base_url": {"type": "string", "title": "Base Url", "description": "Full URL or path relative to dstack-server's base URL"}, "type": {"type": "string", "title": "Type"}}, "additionalProperties": false, "type": "object", "required": ["name", "base_url", "type"], "title": "ServiceModelSpecRequest"}, "ServiceSpecRequest": {"properties": {"url": {"type": "string", "title": "Url", "description": "Full URL or path relative to dstack-server's base URL"}, "model": {"$ref": "#/components/schemas/ServiceModelSpecRequest"}, "options": {"type": "object", "title": "Options", "default": {}}}, "additionalProperties": false, "type": "object", "required": ["url"], "title": "ServiceSpecRequest"}, "SetDefaultGatewayRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}}, "additionalProperties": false, "type": "object", "required": ["name"], "title": "SetDefaultGatewayRequestRequest"}, "SetProjectMembersRequestRequest": {"properties": {"members": {"items": {"$ref": "#/components/schemas/MemberSettingRequest"}, "type": "array", "title": "Members"}}, "additionalProperties": false, "type": "object", "required": ["members"], "title": "SetProjectMembersRequestRequest"}, "SetWildcardDomainRequestRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "wildcard_domain": {"type": "string", "title": "Wildcard Domain"}}, "additionalProperties": false, "type": "object", "required": ["name", "wildcard_domain"], "title": "SetWildcardDomainRequestRequest"}, "SpotPolicy": {"type": "string", "enum": ["spot", "on-demand", "auto"], "title": "SpotPolicy", "description": "An enumeration."}, "StartupOrder": {"type": "string", "enum": ["any", "master-first", "workers-first"], "title": "StartupOrder", "description": "An enumeration."}, "StopCriteria": {"type": "string", "enum": ["all-done", "master-done"], "title": "StopCriteria", "description": "An enumeration."}, "StopRunsRequestRequest": {"properties": {"runs_names": {"items": {"type": "string"}, "type": "array", "title": "Runs Names"}, "abort": {"type": "boolean", "title": "Abort", "description": "Do not wait for a graceful shutdown."}}, "additionalProperties": false, "type": "object", "required": ["runs_names", "abort"], "title": "StopRunsRequestRequest"}, "SubmitRunRequestRequest": {"properties": {"run_spec": {"$ref": "#/components/schemas/RunSpecRequest"}}, "additionalProperties": false, "type": "object", "required": ["run_spec"], "title": "SubmitRunRequestRequest"}, "TGIChatModelRequest": {"properties": {"type": {"type": "string", "enum": ["chat"], "title": "Type", "description": "The type of the model", "default": "chat"}, "name": {"type": "string", "title": "Name", "description": "The name of the model"}, "format": {"type": "string", "enum": ["tgi"], "title": "Format", "description": "The serving format. Must be set to `tgi`"}, "chat_template": {"type": "string", "title": "Chat Template", "description": "The custom prompt template for the model. If not specified, the default prompt template from the HuggingFace Hub configuration will be used"}, "eos_token": {"type": "string", "title": "Eos Token", "description": "The custom end of sentence token. If not specified, the default end of sentence token from the HuggingFace Hub configuration will be used"}}, "additionalProperties": false, "type": "object", "required": ["name", "format"], "title": "TGIChatModelRequest", "description": "Mapping of the model for the OpenAI-compatible endpoint.\n\nAttributes:\n type (str): The type of the model, e.g. \"chat\"\n name (str): The name of the model. This name will be used both to load model configuration from the HuggingFace Hub and in the OpenAI-compatible endpoint.\n format (str): The format of the model, e.g. \"tgi\" if the model is served with HuggingFace's Text Generation Inference.\n chat_template (Optional[str]): The custom prompt template for the model. If not specified, the default prompt template from the HuggingFace Hub configuration will be used.\n eos_token (Optional[str]): The custom end of sentence token. If not specified, the default end of sentence token from the HuggingFace Hub configuration will be used."}, "TaskConfigurationRequest": {"properties": {"nodes": {"type": "integer", "minimum": 1.0, "title": "Nodes", "description": "Number of nodes", "default": 1}, "ports": {"items": {"anyOf": [{"type": "integer", "maximum": 65536.0, "exclusiveMinimum": 0.0}, {"type": "string", "pattern": "^(?:[0-9]+|\\*):[0-9]+$"}, {"$ref": "#/components/schemas/PortMappingRequest"}]}, "type": "array", "title": "Ports", "description": "Port numbers/mapping to expose", "default": []}, "commands": {"items": {"type": "string"}, "type": "array", "title": "Commands", "description": "The shell commands to run", "default": []}, "type": {"type": "string", "enum": ["task"], "title": "Type", "default": "task"}, "name": {"type": "string", "title": "Name", "description": "The run name. If not specified, a random name is generated"}, "image": {"type": "string", "title": "Image", "description": "The name of the Docker image to run"}, "user": {"type": "string", "title": "User", "description": "The user inside the container, `user_name_or_id[:group_name_or_id]` (e.g., `ubuntu`, `1000:1000`). Defaults to the default user from the `image`"}, "privileged": {"type": "boolean", "title": "Privileged", "description": "Run the container in privileged mode", "default": false}, "entrypoint": {"type": "string", "title": "Entrypoint", "description": "The Docker entrypoint"}, "working_dir": {"type": "string", "title": "Working Dir", "description": "The absolute path to the working directory inside the container. Defaults to the `image`'s default working directory"}, "home_dir": {"type": "string", "title": "Home Dir", "default": "/root"}, "registry_auth": {"allOf": [{"$ref": "#/components/schemas/RegistryAuthRequest"}], "title": "Registry Auth", "description": "Credentials for pulling a private Docker image"}, "python": {"allOf": [{"$ref": "#/components/schemas/PythonVersion"}], "description": "The major version of Python. Mutually exclusive with `image` and `docker`"}, "nvcc": {"type": "boolean", "title": "Nvcc", "description": "Use image with NVIDIA CUDA Compiler (NVCC) included. Mutually exclusive with `image` and `docker`"}, "single_branch": {"type": "boolean", "title": "Single Branch", "description": "Whether to clone and track only the current branch or all remote branches. Relevant only when using remote Git repos. Defaults to `false` for dev environments and to `true` for tasks and services"}, "env": {"allOf": [{"$ref": "#/components/schemas/Env"}], "title": "Env", "description": "The mapping or the list of environment variables", "default": {"__root__": {}}}, "shell": {"type": "string", "title": "Shell", "description": "The shell used to run commands. Allowed values are `sh`, `bash`, or an absolute path, e.g., `/usr/bin/zsh`. Defaults to `/bin/sh` if the `image` is specified, `/bin/bash` otherwise"}, "resources": {"allOf": [{"$ref": "#/components/schemas/ResourcesSpecRequest"}], "title": "Resources", "description": "The resources requirements to run the configuration", "default": {"cpu": {"min": 2}, "memory": {"min": 8.0}, "disk": {"size": {"min": 100.0}}}}, "priority": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Priority", "description": "The priority of the run, an integer between `0` and `100`. `dstack` tries to provision runs with higher priority first. Defaults to `0`"}, "volumes": {"items": {"anyOf": [{"$ref": "#/components/schemas/VolumeMountPointRequest"}, {"$ref": "#/components/schemas/InstanceMountPointRequest"}, {"type": "string"}]}, "type": "array", "title": "Volumes", "description": "The volumes mount points", "default": []}, "docker": {"type": "boolean", "title": "Docker", "description": "Use Docker inside the container. Mutually exclusive with `image`, `python`, and `nvcc`. Overrides `privileged`"}, "repos": {"items": {"$ref": "#/components/schemas/RepoSpecRequest"}, "type": "array", "title": "Repos", "description": "The list of Git repos", "default": []}, "files": {"items": {"anyOf": [{"$ref": "#/components/schemas/FilePathMappingRequest"}, {"type": "string"}]}, "type": "array", "title": "Files", "description": "The local to container file path mappings", "default": []}, "setup": {"items": {"type": "string"}, "type": "array", "title": "Setup", "default": []}, "backends": {"items": {"$ref": "#/components/schemas/BackendType"}, "type": "array", "description": "The backends to consider for provisioning (e.g., `[aws, gcp]`)"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The regions to consider for provisioning (e.g., `[eu-west-1, us-west4, westeurope]`)"}, "availability_zones": {"items": {"type": "string"}, "type": "array", "title": "Availability Zones", "description": "The availability zones to consider for provisioning (e.g., `[eu-west-1a, us-west4-a]`)"}, "instance_types": {"items": {"type": "string"}, "type": "array", "title": "Instance Types", "description": "The cloud-specific instance types to consider for provisioning (e.g., `[p3.8xlarge, n1-standard-4]`)"}, "reservation": {"type": "string", "title": "Reservation", "description": "The existing reservation to use for instance provisioning. Supports AWS Capacity Reservations, AWS Capacity Blocks, and GCP reservations"}, "spot_policy": {"allOf": [{"$ref": "#/components/schemas/SpotPolicy"}], "description": "The policy for provisioning spot or on-demand instances: `spot`, `on-demand`, `auto`. Defaults to `on-demand`"}, "retry": {"anyOf": [{"$ref": "#/components/schemas/ProfileRetryRequest"}, {"type": "boolean"}], "title": "Retry", "description": "The policy for resubmitting the run. Defaults to `false`"}, "max_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Max Duration", "description": "The maximum duration of a run (e.g., `2h`, `1d`, etc) in a running state, excluding provisioning and pulling. After it elapses, the run is automatically stopped. Use `off` for unlimited duration. Defaults to `off`"}, "stop_duration": {"anyOf": [{"type": "string", "enum": ["off"]}, {"type": "integer"}, {"type": "boolean"}, {"type": "string"}], "title": "Stop Duration", "description": "The maximum duration of a run graceful stopping. After it elapses, the run is automatically forced stopped. This includes force detaching volumes used by the run. Use `off` for unlimited duration. Defaults to `5m`"}, "max_price": {"type": "number", "exclusiveMinimum": 0.0, "title": "Max Price", "description": "The maximum instance price per hour, in dollars"}, "creation_policy": {"allOf": [{"$ref": "#/components/schemas/CreationPolicy"}], "description": "The policy for using instances from fleets: `reuse`, `reuse-or-create`. Defaults to `reuse-or-create`"}, "idle_duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Idle Duration", "description": "Time to wait before terminating idle instances. Instances are not terminated if the fleet is already at `nodes.min`. Defaults to `5m` for runs and `3d` for fleets. Use `off` for unlimited duration"}, "utilization_policy": {"allOf": [{"$ref": "#/components/schemas/UtilizationPolicyRequest"}], "title": "Utilization Policy", "description": "Run termination policy based on utilization"}, "startup_order": {"allOf": [{"$ref": "#/components/schemas/StartupOrder"}], "description": "The order in which master and workers jobs are started: `any`, `master-first`, `workers-first`. Defaults to `any`"}, "stop_criteria": {"allOf": [{"$ref": "#/components/schemas/StopCriteria"}], "description": "The criteria determining when a multi-node run should be considered finished: `all-done`, `master-done`. Defaults to `all-done`"}, "schedule": {"allOf": [{"$ref": "#/components/schemas/ScheduleRequest"}], "title": "Schedule", "description": "The schedule for starting the run at specified time"}, "fleets": {"items": {"type": "string"}, "type": "array", "title": "Fleets", "description": "The fleets considered for reuse"}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the resource. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}}, "additionalProperties": false, "type": "object", "title": "TaskConfigurationRequest"}, "TensorDockAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}, "api_token": {"type": "string", "title": "Api Token", "description": "The API token"}}, "additionalProperties": false, "type": "object", "required": ["api_key", "api_token"], "title": "TensorDockAPIKeyCredsRequest"}, "TensorDockBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["tensordock"], "title": "Type", "description": "The type of backend", "default": "tensordock"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of TensorDock regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "title": "TensorDockBackendConfigRequest"}, "TensorDockBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["tensordock"], "title": "Type", "description": "The type of backend", "default": "tensordock"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of TensorDock regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/TensorDockAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "TensorDockBackendConfigWithCredsRequest"}, "UnixUserRequest": {"properties": {"uid": {"type": "integer", "minimum": 0.0, "title": "Uid", "description": "User ID"}, "gid": {"type": "integer", "minimum": 0.0, "title": "Gid", "description": "Group ID"}, "username": {"type": "string", "minLength": 1, "title": "Username", "description": "User name"}, "groupname": {"type": "string", "minLength": 1, "title": "Groupname", "description": "Group name"}}, "additionalProperties": false, "type": "object", "title": "UnixUserRequest"}, "UpdateBackendYAMLRequestRequest": {"properties": {"config_yaml": {"type": "string", "title": "Config Yaml"}}, "additionalProperties": false, "type": "object", "required": ["config_yaml"], "title": "UpdateBackendYAMLRequestRequest"}, "UpdateProjectRequestRequest": {"properties": {"is_public": {"type": "boolean", "title": "Is Public"}}, "additionalProperties": false, "type": "object", "required": ["is_public"], "title": "UpdateProjectRequestRequest"}, "UserPermissionsRequest": {"properties": {"can_create_projects": {"type": "boolean", "title": "Can Create Projects"}}, "additionalProperties": false, "type": "object", "required": ["can_create_projects"], "title": "UserPermissionsRequest"}, "UserRequest": {"properties": {"id": {"type": "string", "format": "uuid4", "title": "Id"}, "username": {"type": "string", "title": "Username"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "global_role": {"$ref": "#/components/schemas/GlobalRole"}, "email": {"type": "string", "title": "Email"}, "active": {"type": "boolean", "title": "Active"}, "permissions": {"$ref": "#/components/schemas/UserPermissionsRequest"}, "ssh_public_key": {"type": "string", "title": "Ssh Public Key"}}, "additionalProperties": false, "type": "object", "required": ["id", "username", "global_role", "active", "permissions"], "title": "UserRequest"}, "UserTokenCredsRequest": {"properties": {"token": {"type": "string", "title": "Token"}}, "additionalProperties": false, "type": "object", "required": ["token"], "title": "UserTokenCredsRequest"}, "UserWithCredsRequest": {"properties": {"id": {"type": "string", "format": "uuid4", "title": "Id"}, "username": {"type": "string", "title": "Username"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "global_role": {"$ref": "#/components/schemas/GlobalRole"}, "email": {"type": "string", "title": "Email"}, "active": {"type": "boolean", "title": "Active"}, "permissions": {"$ref": "#/components/schemas/UserPermissionsRequest"}, "ssh_public_key": {"type": "string", "title": "Ssh Public Key"}, "creds": {"$ref": "#/components/schemas/UserTokenCredsRequest"}, "ssh_private_key": {"type": "string", "title": "Ssh Private Key"}}, "additionalProperties": false, "type": "object", "required": ["id", "username", "global_role", "active", "permissions", "creds"], "title": "UserWithCredsRequest"}, "UsersInfoListRequest": {"properties": {"total_count": {"type": "integer", "title": "Total Count"}, "users": {"items": {"$ref": "#/components/schemas/UserRequest"}, "type": "array", "title": "Users"}}, "additionalProperties": false, "type": "object", "required": ["users"], "title": "UsersInfoListRequest"}, "UtilizationPolicyRequest": {"properties": {"min_gpu_utilization": {"type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Min Gpu Utilization", "description": "Minimum required GPU utilization, percent. If any GPU has utilization below specified value during the whole time window, the run is terminated"}, "time_window": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Time Window", "description": "The time window of metric samples taking into account to measure utilization (e.g., `30m`, `1h`). Minimum is `5m`"}}, "additionalProperties": false, "type": "object", "required": ["min_gpu_utilization", "time_window"], "title": "UtilizationPolicyRequest"}, "ValidationError": {"properties": {"loc": {"items": {"anyOf": [{"type": "string"}, {"type": "integer"}]}, "type": "array", "title": "Location"}, "msg": {"type": "string", "title": "Message"}, "type": {"type": "string", "title": "Error Type"}}, "type": "object", "required": ["loc", "msg", "type"], "title": "ValidationError"}, "VastAIAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "VastAIAPIKeyCredsRequest"}, "VastAIBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["vastai"], "title": "Type", "description": "The type of backend", "default": "vastai"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of VastAI regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "title": "VastAIBackendConfigRequest"}, "VastAIBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["vastai"], "title": "Type", "description": "The type of backend", "default": "vastai"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of VastAI regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/VastAIAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "VastAIBackendConfigWithCredsRequest"}, "VerdaAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "client_id": {"type": "string", "title": "Client Id", "description": "The client ID"}, "client_secret": {"type": "string", "title": "Client Secret", "description": "The client secret"}}, "additionalProperties": false, "type": "object", "required": ["client_id", "client_secret"], "title": "VerdaAPIKeyCredsRequest"}, "VerdaBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["verda", "datacrunch"], "title": "Type", "description": "The type of backend"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Verda regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "required": ["type"], "title": "VerdaBackendConfigRequest"}, "VerdaBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["verda", "datacrunch"], "title": "Type", "description": "The type of backend"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Verda regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/VerdaAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["type", "creds"], "title": "VerdaBackendConfigWithCredsRequest"}, "VirtualRepoInfoRequest": {"properties": {"repo_type": {"type": "string", "enum": ["virtual"], "title": "Repo Type", "default": "virtual"}}, "additionalProperties": false, "type": "object", "title": "VirtualRepoInfoRequest"}, "VirtualRunRepoDataRequest": {"properties": {"repo_type": {"type": "string", "enum": ["virtual"], "title": "Repo Type", "default": "virtual"}}, "additionalProperties": false, "type": "object", "title": "VirtualRunRepoDataRequest"}, "VolumeAttachmentDataRequest": {"properties": {"device_name": {"type": "string", "title": "Device Name"}}, "additionalProperties": false, "type": "object", "title": "VolumeAttachmentDataRequest"}, "VolumeAttachmentRequest": {"properties": {"instance": {"$ref": "#/components/schemas/VolumeInstanceRequest"}, "attachment_data": {"$ref": "#/components/schemas/VolumeAttachmentDataRequest"}}, "additionalProperties": false, "type": "object", "required": ["instance"], "title": "VolumeAttachmentRequest"}, "VolumeConfigurationRequest": {"properties": {"type": {"type": "string", "enum": ["volume"], "title": "Type", "default": "volume"}, "name": {"type": "string", "title": "Name", "description": "The volume name"}, "backend": {"allOf": [{"$ref": "#/components/schemas/BackendType"}], "description": "The volume backend"}, "region": {"type": "string", "title": "Region", "description": "The volume region"}, "availability_zone": {"type": "string", "title": "Availability Zone", "description": "The volume availability zone"}, "size": {"type": "number", "title": "Size", "description": "The volume size. Must be specified when creating new volumes"}, "volume_id": {"type": "string", "title": "Volume Id", "description": "The volume ID. Must be specified when registering external volumes"}, "auto_cleanup_duration": {"anyOf": [{"type": "integer"}, {"type": "string"}], "title": "Auto Cleanup Duration", "description": "Time to wait after volume is no longer used by any job before deleting it. Defaults to keep the volume indefinitely. Use the value 'off' or -1 to disable auto-cleanup."}, "tags": {"additionalProperties": {"type": "string"}, "type": "object", "title": "Tags", "description": "The custom tags to associate with the volume. The tags are also propagated to the underlying backend resources. If there is a conflict with backend-level tags, does not override them"}}, "additionalProperties": false, "type": "object", "required": ["backend", "region"], "title": "VolumeConfigurationRequest"}, "VolumeInstanceRequest": {"properties": {"name": {"type": "string", "title": "Name"}, "fleet_name": {"type": "string", "title": "Fleet Name"}, "instance_num": {"type": "integer", "title": "Instance Num"}, "instance_id": {"type": "string", "title": "Instance Id"}}, "additionalProperties": false, "type": "object", "required": ["name", "instance_num"], "title": "VolumeInstanceRequest"}, "VolumeMountPointRequest": {"properties": {"name": {"anyOf": [{"type": "string"}, {"items": {"type": "string"}, "type": "array"}], "title": "Name", "description": "The network volume name or the list of network volume names to mount. If a list is specified, one of the volumes in the list will be mounted. Specify volumes from different backends/regions to increase availability"}, "path": {"type": "string", "title": "Path", "description": "The absolute container path to mount the volume at"}}, "additionalProperties": false, "type": "object", "required": ["name", "path"], "title": "VolumeMountPointRequest"}, "VolumeProvisioningDataRequest": {"properties": {"backend": {"$ref": "#/components/schemas/BackendType"}, "volume_id": {"type": "string", "title": "Volume Id"}, "size_gb": {"type": "integer", "title": "Size Gb"}, "availability_zone": {"type": "string", "title": "Availability Zone"}, "price": {"type": "number", "title": "Price"}, "attachable": {"type": "boolean", "title": "Attachable", "default": true}, "detachable": {"type": "boolean", "title": "Detachable", "default": true}, "backend_data": {"type": "string", "title": "Backend Data"}}, "additionalProperties": false, "type": "object", "required": ["volume_id", "size_gb"], "title": "VolumeProvisioningDataRequest"}, "VolumeRequest": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "name": {"type": "string", "title": "Name"}, "user": {"type": "string", "title": "User"}, "project_name": {"type": "string", "title": "Project Name"}, "configuration": {"$ref": "#/components/schemas/VolumeConfigurationRequest"}, "external": {"type": "boolean", "title": "External"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "last_processed_at": {"type": "string", "format": "date-time", "title": "Last Processed At"}, "status": {"$ref": "#/components/schemas/VolumeStatus"}, "status_message": {"type": "string", "title": "Status Message"}, "deleted": {"type": "boolean", "title": "Deleted"}, "deleted_at": {"type": "string", "format": "date-time", "title": "Deleted At"}, "volume_id": {"type": "string", "title": "Volume Id"}, "provisioning_data": {"$ref": "#/components/schemas/VolumeProvisioningDataRequest"}, "cost": {"type": "number", "title": "Cost", "default": 0}, "attachments": {"items": {"$ref": "#/components/schemas/VolumeAttachmentRequest"}, "type": "array", "title": "Attachments"}, "attachment_data": {"$ref": "#/components/schemas/VolumeAttachmentDataRequest"}}, "additionalProperties": false, "type": "object", "required": ["id", "name", "user", "project_name", "configuration", "external", "created_at", "last_processed_at", "status", "deleted"], "title": "VolumeRequest"}, "VolumeStatus": {"type": "string", "enum": ["submitted", "provisioning", "active", "failed"], "title": "VolumeStatus", "description": "An enumeration."}, "VultrAPIKeyCredsRequest": {"properties": {"type": {"type": "string", "enum": ["api_key"], "title": "Type", "description": "The type of credentials", "default": "api_key"}, "api_key": {"type": "string", "title": "Api Key", "description": "The API key"}}, "additionalProperties": false, "type": "object", "required": ["api_key"], "title": "VultrAPIKeyCredsRequest"}, "VultrBackendConfigRequest": {"properties": {"type": {"type": "string", "enum": ["vultr"], "title": "Type", "description": "The type of backend", "default": "vultr"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Vultr regions. Omit to use all regions"}}, "additionalProperties": false, "type": "object", "title": "VultrBackendConfigRequest"}, "VultrBackendConfigWithCredsRequest": {"properties": {"type": {"type": "string", "enum": ["vultr"], "title": "Type", "description": "The type of backend", "default": "vultr"}, "regions": {"items": {"type": "string"}, "type": "array", "title": "Regions", "description": "The list of Vultr regions. Omit to use all regions"}, "creds": {"allOf": [{"$ref": "#/components/schemas/VultrAPIKeyCredsRequest"}], "title": "Creds", "description": "The credentials"}}, "additionalProperties": false, "type": "object", "required": ["creds"], "title": "VultrBackendConfigWithCredsRequest"}}, "securitySchemes": {"HTTPBearer": {"type": "http", "scheme": "bearer"}}}} \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 448cafbc15..11332fb27d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -148,7 +148,8 @@ plugins: options: docstring_style: google show_source: false - - render_swagger + - render_swagger: + allow_arbitrary_locations: true # Extensions markdown_extensions: From abf100fbdb14c1e59c043a847a03dc1c48bd95c6 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Sat, 31 Jan 2026 18:37:18 +0100 Subject: [PATCH 15/21] - Enhance documentation with titles and descriptions for various pages using YAML frontmatter. - Introduce a custom build system for generating llms.txt and llms-full.txt from documentation files. - Add openapi.json to .gitignore to prevent it from being tracked. - Remove outdated llms.txt file as it is now generated dynamically. Co-Authored-By: Claude Sonnet 4.5 --- .gitignore | 1 + contributing/DOCS.md | 103 ++++++++ docs/docs/concepts/backends.md | 5 + docs/docs/concepts/dev-environments.md | 5 + docs/docs/concepts/events.md | 5 + docs/docs/concepts/fleets.md | 5 + docs/docs/concepts/gateways.md | 5 + docs/docs/concepts/metrics.md | 5 + docs/docs/concepts/projects.md | 5 + docs/docs/concepts/secrets.md | 5 + docs/docs/concepts/services.md | 5 + docs/docs/concepts/tasks.md | 5 + docs/docs/concepts/volumes.md | 5 + docs/docs/guides/protips.md | 5 + docs/docs/guides/server-deployment.md | 5 + docs/docs/guides/troubleshooting.md | 5 + docs/docs/guides/upgrade.md | 5 + docs/docs/index.md | 5 + docs/docs/installation.md | 5 + docs/docs/quickstart.md | 5 + docs/docs/reference/api/rest/openapi.json | 2 +- docs/examples.md | 2 + docs/llms.txt | 48 ---- examples/accelerators/amd/README.md | 5 + examples/accelerators/intel/README.md | 7 +- examples/accelerators/tenstorrent/README.md | 7 +- examples/accelerators/tpu/README.md | 5 + examples/clusters/aws/README.md | 7 +- examples/clusters/crusoe/README.md | 3 +- examples/clusters/gcp/README.md | 5 + examples/clusters/lambda/README.md | 3 +- examples/clusters/nccl-rccl-tests/README.md | 5 + .../distributed-training/axolotl/README.md | 5 + .../distributed-training/ray-ragen/README.md | 7 +- examples/distributed-training/trl/README.md | 5 + examples/inference/nim/README.md | 2 +- examples/inference/sglang/README.md | 5 + examples/inference/tgi/README.md | 2 +- examples/inference/trtllm/README.md | 2 +- examples/inference/vllm/README.md | 3 +- examples/models/wan22/README.md | 5 + .../single-node-training/axolotl/README.md | 5 + examples/single-node-training/trl/README.md | 5 + scripts/docs/gen_llms_files.py | 243 ++++++++++++++++++ scripts/docs/hooks.py | 24 ++ 45 files changed, 544 insertions(+), 62 deletions(-) delete mode 100644 docs/llms.txt create mode 100644 scripts/docs/gen_llms_files.py diff --git a/.gitignore b/.gitignore index 0d2163398d..bed3aa2ccc 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ uv.lock /src/dstack/_internal/server/statics profiling_results.html +docs/docs/reference/api/rest/openapi.json diff --git a/contributing/DOCS.md b/contributing/DOCS.md index c20076466e..a885c5f51e 100644 --- a/contributing/DOCS.md +++ b/contributing/DOCS.md @@ -47,3 +47,106 @@ If you want to build static files, you can use the following command: ```shell uv run mkdocs build -s ``` + +## Documentation build system + +The documentation uses a custom build system with MkDocs hooks to generate various files dynamically. + +### Build hooks + +The build process is customized via hooks in `scripts/docs/hooks.py`: + +#### 1. Example materialization + +Example pages like `examples/single-node-training/trl/index.md` are stubs that reference `README.md` files in the repository root: +- **Stub location**: `docs/examples/single-node-training/trl/index.md` +- **Content source**: `examples/single-node-training/trl/README.md` + +During the build, the hook reads the README content and uses it for rendering the HTML page. + +#### 2. Schema reference expansion + +Files in `docs/reference/**/*.md` can use `#SCHEMA#` placeholders that are expanded with generated schema documentation during the build. + +#### 3. llms.txt generation + +Two files are generated for LLM consumption: + +- **llms.txt**: Structured overview of documentation with titles and descriptions + - Generated from mkdocs nav structure + - Includes sections: Getting started, Concepts, Guides, Examples + - Excludes: Reference section + - Configuration: `scripts/docs/gen_llms_files.py` (INCLUDE_SECTIONS, EXCLUDE_SECTIONS) + +- **llms-full.txt**: Full concatenation of all pages from llms.txt + - Contains complete markdown content of all included pages + +The generation logic is in `scripts/docs/gen_llms_files.py` and uses: +- `site_name`, `site_description`, `site_url` from `mkdocs.yml` +- Page titles from mkdocs nav structure +- Page descriptions from markdown frontmatter + +**Adding descriptions**: To add descriptions to pages, add YAML frontmatter: + +```yaml +--- +title: Page Title +description: Short description of what this page covers +--- +``` + +For examples, add frontmatter to the `README.md` files in the repository root (e.g., `examples/single-node-training/trl/README.md`). + +#### 4. Skills discovery + +The build creates `.well-known/skills/` directory structure for skills discovery: +- Reads `skills/dstack/SKILL.md` +- Parses name and description from frontmatter +- Generates `.well-known/skills/index.json` +- Copies SKILL.md to both `.well-known/skills/dstack/` and site root + +### File structure + +``` +docs/ +├── docs/ # Main documentation content +│ ├── index.md # Getting started +│ ├── installation.md +│ ├── quickstart.md +│ ├── concepts/ # Concept pages +│ ├── guides/ # How-to guides +│ └── reference/ # API reference (schema expansion) +├── examples/ # Example stub files (index.md) +│ └── single-node-training/ +│ └── trl/ +│ └── index.md # Stub referencing root README +└── overrides/ # Theme customization + +examples/ # Example content (repository root) +└── single-node-training/ + └── trl/ + ├── README.md # Actual content with frontmatter + └── train.dstack.yml + +scripts/docs/ +├── hooks.py # MkDocs build hooks +├── gen_llms_files.py # llms.txt generation +├── gen_schema_reference.py # Schema expansion +└── gen_cli_reference.py # CLI reference generation + +skills/ +└── dstack/ + └── SKILL.md # Skills discovery content +``` + +### Testing changes + +When modifying the build system: + +1. Test local build: `uv run mkdocs build -s` +2. Check generated files in `site/`: + - `site/llms.txt` + - `site/llms-full.txt` + - `site/.well-known/skills/index.json` +3. Verify example pages render correctly +4. Check that descriptions appear in llms.txt diff --git a/docs/docs/concepts/backends.md b/docs/docs/concepts/backends.md index 572d4e0411..b601969337 100644 --- a/docs/docs/concepts/backends.md +++ b/docs/docs/concepts/backends.md @@ -1,3 +1,8 @@ +--- +title: Backends +description: Configuring cloud providers and Kubernetes clusters +--- + # Backends Backends allow `dstack` to provision fleets across GPU clouds or Kubernetes clusters. diff --git a/docs/docs/concepts/dev-environments.md b/docs/docs/concepts/dev-environments.md index a159ff808a..81781d49af 100644 --- a/docs/docs/concepts/dev-environments.md +++ b/docs/docs/concepts/dev-environments.md @@ -1,3 +1,8 @@ +--- +title: Dev environments +description: Provisioning remote instances for cloud-based development +--- + # Dev environments A dev environment lets you provision an instance and access it with your desktop IDE. diff --git a/docs/docs/concepts/events.md b/docs/docs/concepts/events.md index fb6e0938a2..d4057715a2 100644 --- a/docs/docs/concepts/events.md +++ b/docs/docs/concepts/events.md @@ -1,3 +1,8 @@ +--- +title: Events +description: Auditing resource state changes and operations +--- + # Events Events provide a chronological record of notable state changes and operations affecting `dstack` resources. They are designed for auditing, debugging, and understanding the lifecycle of runs, jobs, fleets, and other resources. diff --git a/docs/docs/concepts/fleets.md b/docs/docs/concepts/fleets.md index dad06cb80a..02308a649a 100644 --- a/docs/docs/concepts/fleets.md +++ b/docs/docs/concepts/fleets.md @@ -1,3 +1,8 @@ +--- +title: Fleets +description: Managing pools of compute instances +--- + # Fleets Before submitting runs, you must create a fleet. Fleets act as both pools of instances and templates for how those instances are provisioned. diff --git a/docs/docs/concepts/gateways.md b/docs/docs/concepts/gateways.md index 7402bc5762..55573bd747 100644 --- a/docs/docs/concepts/gateways.md +++ b/docs/docs/concepts/gateways.md @@ -1,3 +1,8 @@ +--- +title: Gateways +description: Managing ingress traffic and endpoints for services +--- + # Gateways Gateways manage ingress traffic for running [services](services.md), handle auto-scaling and rate limits, enable HTTPS, and allow you to configure a custom domain. They also support custom routers, such as the [SGLang Model Gateway](https://docs.sglang.ai/advanced_features/router.html#). diff --git a/docs/docs/concepts/metrics.md b/docs/docs/concepts/metrics.md index 394bb59d4b..3bebef4c09 100644 --- a/docs/docs/concepts/metrics.md +++ b/docs/docs/concepts/metrics.md @@ -1,3 +1,8 @@ +--- +title: Metrics +description: Tracking and monitoring system metrics +--- + # Metrics `dstack` automatically tracks essential metrics, which you can access via the CLI and UI. diff --git a/docs/docs/concepts/projects.md b/docs/docs/concepts/projects.md index a67e3d0569..a7e7454079 100644 --- a/docs/docs/concepts/projects.md +++ b/docs/docs/concepts/projects.md @@ -1,3 +1,8 @@ +--- +title: Projects +description: Organizing teams and isolating resources +--- + # Projects Projects enable the isolation of different teams and their resources. Each project can configure its own backends and diff --git a/docs/docs/concepts/secrets.md b/docs/docs/concepts/secrets.md index d541f281a6..0528e10c09 100644 --- a/docs/docs/concepts/secrets.md +++ b/docs/docs/concepts/secrets.md @@ -1,3 +1,8 @@ +--- +title: Secrets +description: Managing sensitive values and credentials +--- + # Secrets Secrets allow centralized management of sensitive values such as API keys and credentials. They are project-scoped, managed by project admins, and can be referenced in run configurations to pass sensitive values to runs in a secure manner. diff --git a/docs/docs/concepts/services.md b/docs/docs/concepts/services.md index d75b752c47..fe5830f356 100644 --- a/docs/docs/concepts/services.md +++ b/docs/docs/concepts/services.md @@ -1,3 +1,8 @@ +--- +title: Services +description: Deploying models and web apps as endpoints +--- + # Services Services allow you to deploy models or web apps as secure and scalable endpoints. diff --git a/docs/docs/concepts/tasks.md b/docs/docs/concepts/tasks.md index f0a0321466..dd4a83c62c 100644 --- a/docs/docs/concepts/tasks.md +++ b/docs/docs/concepts/tasks.md @@ -1,3 +1,8 @@ +--- +title: Tasks +description: Running commands for training and batch processing +--- + # Tasks A task allows you to run arbitrary commands on one or more nodes. They are best suited for jobs like training or batch processing. diff --git a/docs/docs/concepts/volumes.md b/docs/docs/concepts/volumes.md index fa5d73c714..e6d6c4cf91 100644 --- a/docs/docs/concepts/volumes.md +++ b/docs/docs/concepts/volumes.md @@ -1,3 +1,8 @@ +--- +title: Volumes +description: Managing persistent data storage +--- + # Volumes Volumes enable data persistence between runs of dev environments, tasks, and services. diff --git a/docs/docs/guides/protips.md b/docs/docs/guides/protips.md index dfb7abf0b6..a68d43f3d3 100644 --- a/docs/docs/guides/protips.md +++ b/docs/docs/guides/protips.md @@ -1,3 +1,8 @@ +--- +title: Protips +description: Tips and tricks for using dstack efficiently +--- + # Protips Below are tips and tricks to use `dstack` more efficiently. diff --git a/docs/docs/guides/server-deployment.md b/docs/docs/guides/server-deployment.md index 42365452aa..966c4c7cd2 100644 --- a/docs/docs/guides/server-deployment.md +++ b/docs/docs/guides/server-deployment.md @@ -1,3 +1,8 @@ +--- +title: Server Deployment +description: Deploying the dstack server +--- + The `dstack` server can run on your laptop or any environment with access to the cloud and on-prem clusters you plan to use. The minimum hardware requirements for running the server are 1 CPU and 1GB of RAM. diff --git a/docs/docs/guides/troubleshooting.md b/docs/docs/guides/troubleshooting.md index 2b4356fb5c..87169081f9 100644 --- a/docs/docs/guides/troubleshooting.md +++ b/docs/docs/guides/troubleshooting.md @@ -1,3 +1,8 @@ +--- +title: Troubleshooting +description: Common issues and how to resolve them +--- + # Troubleshooting ## Reporting issues diff --git a/docs/docs/guides/upgrade.md b/docs/docs/guides/upgrade.md index aacf473fd8..220c6b7475 100644 --- a/docs/docs/guides/upgrade.md +++ b/docs/docs/guides/upgrade.md @@ -1,3 +1,8 @@ +--- +title: Upgrade +description: Upgrading to newer versions of dstack +--- + # Upgrade guide diff --git a/docs/docs/index.md b/docs/docs/index.md index c48338c563..8afc24fdb5 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -1,3 +1,8 @@ +--- +title: What is dstack? +description: Introduction to dstack and how it works +--- + # What is dstack? `dstack` is a unified control plane for GPU provisioning and orchestration that works with any GPU cloud, Kubernetes, or on-prem clusters. diff --git a/docs/docs/installation.md b/docs/docs/installation.md index b5af07f8e4..725611f08e 100644 --- a/docs/docs/installation.md +++ b/docs/docs/installation.md @@ -1,3 +1,8 @@ +--- +title: Installation +description: How to install the dstack server and CLI +--- + # Installation