dell_ai/platforms.py (37 lines of code) (raw):
"""Platform-related functionality for the Dell AI SDK."""
from typing import TYPE_CHECKING, List, Optional
from pydantic import BaseModel, Field
from dell_ai import constants
from dell_ai.exceptions import ResourceNotFoundError
if TYPE_CHECKING:
from dell_ai.client import DellAIClient
class Platform(BaseModel):
"""Represents a platform available in the Dell Enterprise Hub."""
id: str
name: str
disabled: bool
platform_type: str = Field(alias="platformType")
platform: str
vendor: str
accelerator_type: str = Field(alias="acceleratorType")
accelerator: str
gpuram: Optional[str] = Field(default=None)
gpuinterconnect: Optional[str] = Field(default=None)
product_name: str = Field(alias="productName")
totalgpucount: Optional[int] = Field(default=None)
interconnect_east_west: Optional[str] = Field(
default=None, alias="interonnect-east-west"
)
interconnect_north_south: Optional[str] = Field(
default=None, alias="interconnect-north-south"
)
class Config:
"""Pydantic model configuration.
The 'populate_by_name' setting allows the model to be populated using either:
1. The Pythonic snake_case attribute names (e.g., product_name)
2. The original camelCase names from the API (e.g., productName)
This provides compatibility with the API response format while maintaining
Pythonic naming conventions in our codebase.
"""
populate_by_name = True
def list_platforms(client: "DellAIClient") -> List[str]:
"""
Get a list of all available platform SKU IDs.
Args:
client: The Dell AI client
Returns:
A list of platform SKU IDs
Raises:
AuthenticationError: If authentication fails
APIError: If the API returns an error
"""
response = client._make_request("GET", constants.PLATFORMS_ENDPOINT)
return response.get("skus", [])
def get_platform(client: "DellAIClient", platform_id: str) -> Platform:
"""
Get detailed information about a specific platform.
Args:
client: The Dell AI client
platform_id: The platform SKU ID
Returns:
Detailed platform information as a Platform object
Raises:
ResourceNotFoundError: If the platform is not found
AuthenticationError: If authentication fails
APIError: If the API returns an error
"""
try:
endpoint = f"{constants.PLATFORMS_ENDPOINT}/{platform_id}"
response = client._make_request("GET", endpoint)
return Platform.model_validate(response)
except ResourceNotFoundError:
# Reraise with more specific information
raise ResourceNotFoundError("platform", platform_id)