import os import pandas as pd import xgboost as xgb from typing import Dict, List, Any class EndpointHandler: def __init__(self, path=""): self.model = xgb.XGBClassifier() self.model.load_model(os.path.join(path, "xgboost_model.json")) self.features = [ 'Speed (RPM)', 'Torque (Nm)', 'Flux (Wb)', 'Voltage (V)', 'Current (A)', 'Power (W)', 'Kp', 'Ki', 'Kd', 'PID Gain Adjustment', 'Speed Overshoot (RPM)', 'Torque Ripple (Nm)', 'Flux Ripple (Wb)', 'Control Error (RPM)', 'ISE', 'Stabilization Time (s)', 'Load Disturbance (Nm)', 'Internal Disturbance (Friction, Temp)', 'Simulation Step (s)', 'Optimization Iteration' ] def __call__(self, data: Any) -> List[Dict[str, Any]]: inputs = data.get("inputs", data) if isinstance(inputs, dict): inputs = [inputs] df = pd.DataFrame(inputs) for col in self.features: if col not in df.columns: df[col] = 0 df = df[self.features] preds = self.model.predict(df) probs = self.model.predict_proba(df)[:, 1] return [{"label": "Success" if int(p) == 1 else "Failure", "score": float(pr)} for p, pr in zip(preds, probs)]