Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| from typing import Any, Dict | |
| from fastapi.responses import JSONResponse | |
| from api.model.model_service import ModelService | |
| from packages import percentage | |
| class ModelController: | |
| def __init__(self, model_service: ModelService): | |
| self.model_service = model_service | |
| async def predict(self, input_data: Dict[str, Any]) -> JSONResponse: | |
| if not self.model_service.is_model_loaded(): | |
| raise RuntimeError("Model not loaded on server.") | |
| df = await self.model_service.preprocess_data(input_data) | |
| pred, proba_yes, proba_no, priority = await self.model_service.predict(df) | |
| return JSONResponse( | |
| status_code=200, | |
| content={ | |
| "status_code": 200, | |
| "success": True, | |
| "timestamp": datetime.utcnow().isoformat(), | |
| "data": { | |
| "predicted_class": "YES" if pred == 1 else "NO", | |
| "probability_yes": round(proba_yes, 4) | |
| if proba_yes is not None | |
| else None, | |
| "probability_no": round(proba_no, 4) | |
| if proba_no is not None | |
| else None, | |
| "probability_yes_percentage": percentage(proba_yes) | |
| if proba_yes is not None | |
| else None, | |
| "probability_no_percentage": percentage(proba_no) | |
| if proba_no is not None | |
| else None, | |
| "priority": priority, | |
| }, | |
| "meta": { | |
| "input_shape": list(df.shape), | |
| }, | |
| }, | |
| ) | |
| async def get_complete_model_info(self) -> JSONResponse: | |
| model_metadata = self.model_service.get_complete_model_info() | |
| return JSONResponse( | |
| status_code=200, | |
| content={ | |
| "status_code": 200, | |
| "success": True, | |
| "timestamp": datetime.utcnow().isoformat(), | |
| "data": model_metadata, | |
| }, | |
| ) | |