From 8bfde2e5242c80ff88c582005985801b91cba902 Mon Sep 17 00:00:00 2001 From: peterschmidt85 Date: Wed, 27 Aug 2025 13:26:32 +0200 Subject: [PATCH] `dstack offer` fixes: - [x] Added older-server compatibility (to exclude `repos` - [x] Use backend from offer --- src/dstack/_internal/core/compatibility/gpus.py | 13 +++++++++++++ src/dstack/_internal/server/services/gpus.py | 4 ++-- src/dstack/api/server/_gpus.py | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 src/dstack/_internal/core/compatibility/gpus.py diff --git a/src/dstack/_internal/core/compatibility/gpus.py b/src/dstack/_internal/core/compatibility/gpus.py new file mode 100644 index 0000000000..3885001273 --- /dev/null +++ b/src/dstack/_internal/core/compatibility/gpus.py @@ -0,0 +1,13 @@ +from typing import Optional + +from dstack._internal.core.compatibility.runs import get_run_spec_excludes +from dstack._internal.core.models.common import IncludeExcludeDictType +from dstack._internal.server.schemas.gpus import ListGpusRequest + + +def get_list_gpus_excludes(request: ListGpusRequest) -> Optional[IncludeExcludeDictType]: + list_gpus_excludes: IncludeExcludeDictType = {} + run_spec_excludes = get_run_spec_excludes(request.run_spec) + if run_spec_excludes is not None: + list_gpus_excludes["run_spec"] = run_spec_excludes + return list_gpus_excludes diff --git a/src/dstack/_internal/server/services/gpus.py b/src/dstack/_internal/server/services/gpus.py index c2ddcd2fd8..c5eee4b65c 100644 --- a/src/dstack/_internal/server/services/gpus.py +++ b/src/dstack/_internal/server/services/gpus.py @@ -79,8 +79,8 @@ def _process_offers_into_backend_gpus( """Transforms raw offers into a structured list of BackendGpus, aggregating GPU info.""" backend_data: Dict[BackendType, Dict] = {} - for backend, offer in offers: - backend_type = backend.TYPE + for _, offer in offers: + backend_type = offer.backend if backend_type not in backend_data: backend_data[backend_type] = {"gpus": {}, "regions": set()} diff --git a/src/dstack/api/server/_gpus.py b/src/dstack/api/server/_gpus.py index b30ae8a894..f7bff4d49e 100644 --- a/src/dstack/api/server/_gpus.py +++ b/src/dstack/api/server/_gpus.py @@ -2,6 +2,7 @@ from pydantic import parse_obj_as +from dstack._internal.core.compatibility.gpus import get_list_gpus_excludes from dstack._internal.core.models.runs import RunSpec from dstack._internal.server.schemas.gpus import GpuGroup, ListGpusRequest, ListGpusResponse from dstack.api.server._group import APIClientGroup @@ -17,6 +18,6 @@ def list_gpus( body = ListGpusRequest(run_spec=run_spec, group_by=group_by) resp = self._request( f"/api/project/{project_name}/gpus/list", - body=body.json(), + body=body.json(exclude=get_list_gpus_excludes(body)), ) return parse_obj_as(ListGpusResponse, resp.json()).gpus