zenvolt-api / schemas.py
happynickamazon's picture
Upload 45 files
dc610d2 verified
Raw History Blame Contribute Delete
2.37 kB
from pydantic import BaseModel, Field
from typing import List, Optional, Dict
class BMSDataPoint(BaseModel):
"""Single BMS data point."""
cycle_index: int
voltage: float
current: float
temperature: float
capacity: float
timestamp: Optional[str] = None
class BMSDataInput(BaseModel):
"""BMS data input for prediction."""
data: List[BMSDataPoint]
initial_capacity: Optional[float] = None
forecast_horizons: Optional[List[int]] = Field(default=[10, 50, 100])
class HealthPredictionResponse(BaseModel):
"""ML prediction response."""
current_soh: Dict[str, float]
health_score: float
remaining_life: Dict[str, float]
degradation_rate: Dict[str, float]
forecasts: Dict[str, Dict[str, float]]
data_quality: Dict[str, float]
current_cycle: int
confidence: float
model_info: Dict[str, str]
class ModelInfoResponse(BaseModel):
"""Model information for Trust Engine proof."""
model_type: str
training_data: str
validation_data: str
metrics: Dict[str, float]
feature_count: int
version: str
class AssetCreate(BaseModel):
"""Model for creating a new asset."""
owner_id: str
project_name: str
asset_id: str
location: str
capacity: float
bms_provider: Optional[str] = None
category: List[str] = Field(default_factory=list)
project_stage: str = "Pending"
initial_prediction: Optional[Dict] = None # Initial prediction data
class AssetResponse(BaseModel):
"""Asset response model."""
id: str
owner_id: str
projectName: str
assetId: str
location: str
capacity: float
bmsProvider: Optional[str]
category: List[str]
projectStage: str
healthScore: Optional[float]
remainingLife: Optional[float]
degradationRate: Optional[float]
confidence: Optional[float]
stateOfCharge: Optional[float]
voltage: Optional[float]
temperature: Optional[float]
isOnline: bool
nftHash: Optional[str]
nftMintDate: Optional[str]
blockExplorerUrl: Optional[str]
createdAt: Optional[str]
updatedAt: Optional[str]
lastUpdated: Optional[str]
class FleetMetricsResponse(BaseModel):
"""Fleet metrics response."""
totalAssets: int
avgHealth: float
totalCapacity: float
certifiedCount: int
criticalCount: int
avgRemainingLife: float