Spaces:
Sleeping
Sleeping
| import os | |
| import joblib | |
| import pandas as pd | |
| import gradio as gr | |
| # --- 1) Загружаем модель --- | |
| # Положи свой файл рядом (например, model.joblib) | |
| # или укажи путь через переменную окружения MODEL_PATH | |
| MODEL_PATH = os.getenv("MODEL_PATH", "model.joblib") | |
| model = joblib.load(MODEL_PATH) | |
| # Имена колонок должны совпадать с теми, на которых обучалась модель | |
| FEATURE_COLUMNS = [ | |
| "Type", | |
| "Air temperature [K]", | |
| "Process temperature [K]", | |
| "Rotational speed [rpm]", | |
| "Torque [Nm]", | |
| "Tool wear [min]", | |
| ] | |
| TYPE_CHOICES = ["L", "M", "H"] # под твой датасет | |
| # --- 2) Функция предсказания для одной записи --- | |
| def predict_single(_type, air_k, proc_k, rpm, torque, wear): | |
| row = { | |
| "Type": _type, | |
| "Air temperature [K]": float(air_k), | |
| "Process temperature [K]": float(proc_k), | |
| "Rotational speed [rpm]": float(rpm), | |
| "Torque [Nm]": float(torque), | |
| "Tool wear [min]": float(wear), | |
| } | |
| X = pd.DataFrame([row], columns=FEATURE_COLUMNS) | |
| if hasattr(model, "predict_proba"): | |
| proba = float(model.predict_proba(X)[:, 1][0]) | |
| label = int(proba >= 0.5) | |
| else: | |
| # на случай, если модели нет predict_proba (вернём 0/1) | |
| label = int(model.predict(X)[0]) | |
| proba = float(label) | |
| return round(proba, 4), int(label) | |
| # --- 3) Пакетный режим (CSV/DataFrame) --- | |
| def predict_batch(df: pd.DataFrame): | |
| # Проверяем, что нужные колонки есть | |
| missing = [c for c in FEATURE_COLUMNS if c not in df.columns] | |
| if missing: | |
| raise gr.Error(f"В CSV не хватает колонок: {missing}") | |
| X = df[FEATURE_COLUMNS].copy() | |
| if hasattr(model, "predict_proba"): | |
| probs = model.predict_proba(X)[:, 1] | |
| labels = (probs >= 0.5).astype(int) | |
| else: | |
| labels = model.predict(X) | |
| probs = labels.astype(float) | |
| out = df.copy() | |
| out["failure_probability"] = probs.round(4) | |
| out["predicted_label"] = labels | |
| return out | |
| # --- 4) UI --- | |
| with gr.Blocks(title="Predictive Maintenance (Gradio)") as demo: | |
| gr.Markdown("## Predictive Maintenance – Inference\nВвод параметров → предсказание вероятности отказа.") | |
| with gr.Tab("Single"): | |
| with gr.Row(): | |
| t = gr.Dropdown(TYPE_CHOICES, value="L", label="Type") | |
| aK = gr.Number(value=300.0, label="Air temperature [K]") | |
| pK = gr.Number(value=310.0, label="Process temperature [K]") | |
| with gr.Row(): | |
| rpm = gr.Number(value=1500, label="Rotational speed [rpm]") | |
| tq = gr.Number(value=40.0, label="Torque [Nm]") | |
| tw = gr.Number(value=120.0, label="Tool wear [min]") | |
| btn = gr.Button("Predict") | |
| prob = gr.Number(label="failure_probability") | |
| labl = gr.Number(label="predicted_label (0/1)") | |
| # api_name="predict" — даёт REST-эндпоинт /run/predict | |
| btn.click( | |
| predict_single, | |
| inputs=[t, aK, pK, rpm, tq, tw], | |
| outputs=[prob, labl], | |
| api_name="predict" | |
| ) | |
| with gr.Tab("Batch (CSV)"): | |
| gr.Markdown( | |
| "Загрузи CSV с колонками: " | |
| + ", ".join([f"`{c}`" for c in FEATURE_COLUMNS]) | |
| ) | |
| df_in = gr.Dataframe(headers=FEATURE_COLUMNS, label="Input Data", row_count=2) | |
| btn_b = gr.Button("Predict for all rows") | |
| df_out = gr.Dataframe(label="Output with predictions") | |
| btn_b.click(predict_batch, inputs=df_in, outputs=df_out, api_name="predict_batch") | |
| # Запуск | |
| if __name__ == "__main__": | |
| demo.launch() | |