Skip to content

Commit 5725924

Browse files
[Feature]: Allow listing available key resources such as gpu, region, and backends #2142 (WIP)
Minor refactoring
1 parent c8d7bdd commit 5725924

6 files changed

Lines changed: 21 additions & 21 deletions

File tree

src/dstack/_internal/cli/commands/gpu.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def _command(self, args: argparse.Namespace):
7676
status = contextlib.nullcontext()
7777

7878
with status:
79-
gpu_response = self.api.client.gpus.get_gpus(
79+
gpu_response = self.api.client.gpus.list_gpus(
8080
self.api.project,
8181
run_spec,
8282
group_by=args.group_by,

src/dstack/_internal/server/routers/gpus.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
from dstack._internal.server.db import get_session
77
from dstack._internal.server.models import ProjectModel, UserModel
8-
from dstack._internal.server.schemas.gpus import GetRunGpusRequest, RunGpusResponse
8+
from dstack._internal.server.schemas.gpus import ListGpusRequest, ListGpusResponse
99
from dstack._internal.server.security.permissions import ProjectMember
10-
from dstack._internal.server.services.gpus import get_run_gpus_grouped
10+
from dstack._internal.server.services.gpus import list_gpus_grouped
1111
from dstack._internal.server.utils.routers import get_base_api_additional_responses
1212

1313
project_router = APIRouter(
@@ -17,13 +17,13 @@
1717
)
1818

1919

20-
@project_router.post("/list", response_model=RunGpusResponse, response_model_exclude_none=True)
21-
async def get_run_gpus(
22-
body: GetRunGpusRequest,
20+
@project_router.post("/list", response_model=ListGpusResponse, response_model_exclude_none=True)
21+
async def list_gpus(
22+
body: ListGpusRequest,
2323
session: AsyncSession = Depends(get_session),
2424
user_project: Tuple[UserModel, ProjectModel] = Depends(ProjectMember()),
25-
) -> RunGpusResponse:
25+
) -> ListGpusResponse:
2626
_, project = user_project
27-
return await get_run_gpus_grouped(
27+
return await list_gpus_grouped(
2828
session=session, project=project, run_spec=body.run_spec, group_by=body.group_by
2929
)

src/dstack/_internal/server/schemas/gpus.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ class BackendGpus(CoreModel):
3030
regions: List[str]
3131

3232

33-
class GetRunGpusRequest(CoreModel):
34-
"""Request for getting run GPUs with optional grouping."""
33+
class ListGpusRequest(CoreModel):
34+
"""Request for listing GPUs with optional grouping."""
3535

3636
run_spec: RunSpec
3737
group_by: Optional[List[Literal["backend", "region", "count"]]] = Field(
@@ -56,7 +56,7 @@ class GpuGroup(CoreModel):
5656
region: Optional[str] = None
5757

5858

59-
class RunGpusResponse(CoreModel):
59+
class ListGpusResponse(CoreModel):
6060
"""Response containing GPU specifications."""
6161

6262
gpus: List[GpuGroup] = Field(

src/dstack/_internal/server/services/gpus.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
BackendGpu,
1313
BackendGpus,
1414
GpuGroup,
15-
RunGpusResponse,
15+
ListGpusResponse,
1616
)
1717
from dstack._internal.server.services.offers import get_offers_by_requirements
1818

@@ -354,12 +354,12 @@ def _get_gpus_grouped_by_backend_region_and_count(
354354
)
355355

356356

357-
async def get_run_gpus_grouped(
357+
async def list_gpus_grouped(
358358
session: AsyncSession,
359359
project: ProjectModel,
360360
run_spec: RunSpec,
361361
group_by: Optional[List[Literal["backend", "region", "count"]]] = None,
362-
) -> RunGpusResponse:
362+
) -> ListGpusResponse:
363363
"""Retrieves available GPU specifications based on a run spec, with optional grouping."""
364364
offers = await _get_gpu_offers(session, project, run_spec)
365365
backend_gpus = _process_offers_into_backend_gpus(offers)
@@ -383,4 +383,4 @@ async def get_run_gpus_grouped(
383383
else:
384384
gpus = _get_gpus_with_no_grouping(backend_gpus)
385385

386-
return RunGpusResponse(gpus=gpus)
386+
return ListGpusResponse(gpus=gpus)

src/dstack/api/server/_gpus.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33
from pydantic import parse_obj_as
44

55
from dstack._internal.core.models.runs import RunSpec
6-
from dstack._internal.server.schemas.gpus import GetRunGpusRequest, RunGpusResponse
6+
from dstack._internal.server.schemas.gpus import ListGpusRequest, ListGpusResponse
77
from dstack.api.server._group import APIClientGroup
88

99

1010
class GpusAPIClient(APIClientGroup):
11-
def get_gpus(
11+
def list_gpus(
1212
self,
1313
project_name: str,
1414
run_spec: RunSpec,
1515
group_by: Optional[List[str]] = None,
16-
) -> RunGpusResponse:
17-
body = GetRunGpusRequest(run_spec=run_spec, group_by=group_by)
16+
) -> ListGpusResponse:
17+
body = ListGpusRequest(run_spec=run_spec, group_by=group_by)
1818
resp = self._request(
1919
f"/api/project/{project_name}/gpus/list",
2020
body=body.json(),
2121
)
22-
return parse_obj_as(RunGpusResponse, resp.json())
22+
return parse_obj_as(ListGpusResponse, resp.json())

src/tests/_internal/server/routers/test_gpus.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ async def call_gpus_api(
109109
)
110110

111111

112-
class TestGetRunGpus:
112+
class TestListGpus:
113113
@pytest.mark.asyncio
114114
@pytest.mark.parametrize("test_db", ["sqlite", "postgres"], indirect=True)
115115
async def test_returns_403_if_not_project_member(

0 commit comments

Comments
 (0)