| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import math
- from typing import List, Optional
- from fastapi import APIRouter, Depends, Query
- from gpustack.schemas.common import PaginatedList, Pagination
- from gpustack.server.catalog import (
- DraftModel,
- get_catalog_draft_models,
- )
- from gpustack.server.deps import ListParamsDep
- router = APIRouter()
- @router.get("", response_model=PaginatedList[DraftModel])
- async def get_draft_models(
- params: ListParamsDep,
- search: str = None,
- algorithm: Optional[str] = Query(None, description="Filter by algorithm."),
- draft_models: List[DraftModel] = Depends(get_catalog_draft_models),
- ):
- if search:
- search = search.strip().lower()
- draft_models = [model for model in draft_models if search in model.name.lower()]
- if algorithm:
- draft_models = [
- model
- for model in draft_models
- if model.algorithm is not None and model.algorithm == algorithm
- ]
- count = len(draft_models)
- if params.page < 1 or params.perPage < 1:
- # Return all items.
- pagination = Pagination(
- page=1,
- perPage=count,
- total=count,
- totalPage=1,
- )
- return PaginatedList[DraftModel](items=draft_models, pagination=pagination)
- # Paginate results.
- total_page = math.ceil(count / params.perPage)
- start_index = (params.page - 1) * params.perPage
- end_index = start_index + params.perPage
- paginated_items = draft_models[start_index:end_index]
- pagination = Pagination(
- page=params.page,
- perPage=params.perPage,
- total=count,
- totalPage=total_page,
- )
- return PaginatedList[DraftModel](items=paginated_items, pagination=pagination)
|