from fastapi import FastAPI, HTTPException import logging from src.config import Config from src.models import SensorData, AnalysisResponse from src.services import AnalysisService logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) config = Config() app = FastAPI(title=config.APP_TITLE, version=config.APP_VERSION) service = AnalysisService(config) @app.post("/analyze", response_model=AnalysisResponse) async def analyze_sensor_data(data: SensorData): try: logger.info(f"Processing request with {len(data.vdc1)} voltage and {len(data.idc1)} current data points") ml_output, agent_output = service.analyze(data.vdc1, data.idc1, data.api_key, data.asset_id) return AnalysisResponse(ml_output=ml_output, agent_output=agent_output) except HTTPException: raise except Exception as e: logger.error(f"Error processing request: {e}") raise HTTPException(status_code=500, detail=str(e)) @app.get("/") async def root(): return {"message": "Solar PV Predictive Maintenance", "endpoint": "/analyze (POST)"} if __name__ == "__main__": import uvicorn uvicorn.run(app, host=config.HOST, port=config.PORT)