model_sets.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from datetime import date
  2. from enum import Enum
  3. from typing import List, Optional, Union
  4. from pydantic import BaseModel, ConfigDict, field_validator
  5. from gpustack.schemas.models import (
  6. ModelSource,
  7. ModelSpecBase,
  8. )
  9. class GPUFilters(BaseModel):
  10. vendor: Optional[Union[str, List[str]]] = None
  11. """List of GPU vendors, e.g., ['nvidia', 'amd'] or 'nvidia'."""
  12. compute_capability: Optional[str] = None
  13. """Compute capability filter expressed using pip-style version specifiers. E.g., '>=7.0,<8.0'."""
  14. vendor_variant: Optional[Union[str, List[str]]] = None
  15. """List of GPU vendor variants. For example, ['910b', '310p'] or '910b' for Ascend NPUs."""
  16. @field_validator("vendor", "vendor_variant", mode="before")
  17. def normalize_str_or_list_fields(cls, v):
  18. if v is None:
  19. return []
  20. if isinstance(v, str):
  21. return [v]
  22. return v
  23. class ModelSpec(ModelSpecBase):
  24. name: Optional[str] = None
  25. quantization: Optional[str] = None
  26. mode: Optional[str] = "standard"
  27. gpu_filters: Optional[GPUFilters] = None
  28. class SizeUnit(str, Enum):
  29. MILLION = "M"
  30. BILLION = "B"
  31. TRILLION = "T"
  32. class ModelSetBase(BaseModel):
  33. name: str
  34. id: Optional[int] = None
  35. description: Optional[str] = None
  36. order: Optional[int] = None
  37. home: Optional[str] = None
  38. icon: Optional[str] = None
  39. categories: Optional[List[str]] = None
  40. capabilities: Optional[List[str]] = None
  41. size: Optional[float] = None
  42. activated_size: Optional[float] = None
  43. size_unit: Optional[SizeUnit] = None
  44. licenses: Optional[List[str]] = None
  45. release_date: Optional[date] = None
  46. model_config = ConfigDict(protected_namespaces=())
  47. class ModelSetPublic(ModelSetBase):
  48. pass
  49. class ModelSet(ModelSetBase):
  50. specs: List[ModelSpec]
  51. class DraftModel(ModelSource):
  52. name: str
  53. algorithm: str
  54. description: Optional[str] = None
  55. class Catalog(BaseModel):
  56. model_sets: List[ModelSet]
  57. draft_models: List[DraftModel]