Spaces:
Runtime error
Runtime error
| import os | |
| import json | |
| import joblib | |
| import pandas as pd | |
| import gradio as gr | |
| BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
| MODELS_DIR = os.path.join(BASE_DIR, "models") | |
| MODEL_CANDIDATES = [ | |
| os.path.join(MODELS_DIR, "best_model.pkl"), | |
| os.path.join(MODELS_DIR, "best_model (1).pkl"), | |
| ] | |
| FEATURE_FILE = os.path.join(MODELS_DIR, "feature_names.txt") | |
| INFO_FILE = os.path.join(MODELS_DIR, "model_info.json") | |
| def find_existing_file(paths): | |
| for path in paths: | |
| if os.path.exists(path): | |
| return path | |
| return None | |
| def load_artifacts(): | |
| model_path = find_existing_file(MODEL_CANDIDATES) | |
| if model_path is None: | |
| raise FileNotFoundError( | |
| f"Model file not found. Looked for: {', '.join(MODEL_CANDIDATES)}" | |
| ) | |
| if not os.path.exists(FEATURE_FILE): | |
| raise FileNotFoundError(f"Feature file not found: {FEATURE_FILE}") | |
| model = joblib.load(model_path) | |
| with open(FEATURE_FILE, "r", encoding="utf-8") as f: | |
| feature_names = [line.strip() for line in f if line.strip()] | |
| model_info = {} | |
| if os.path.exists(INFO_FILE): | |
| with open(INFO_FILE, "r", encoding="utf-8") as f: | |
| model_info = json.load(f) | |
| return model, feature_names, model_info, model_path | |
| model, feature_names, model_info, model_path = load_artifacts() | |
| def predict_engine_condition(*values): | |
| input_df = pd.DataFrame([dict(zip(feature_names, values))]) | |
| try: | |
| prediction = model.predict(input_df)[0] | |
| result_text = f"Predicted Engine Condition: {prediction}" | |
| if hasattr(model, "predict_proba"): | |
| proba = model.predict_proba(input_df) | |
| proba_df = pd.DataFrame( | |
| proba, | |
| columns=[f"Class {i}" for i in range(proba.shape[1])] | |
| ) | |
| return result_text, proba_df | |
| return result_text, pd.DataFrame() | |
| except Exception as e: | |
| return f"Prediction failed: {e}", pd.DataFrame() | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# Engine Condition Prediction App") | |
| gr.Markdown("Enter sensor values to predict the engine condition.") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### Model Details") | |
| gr.Markdown(f"**Loaded model:** `{os.path.basename(model_path)}`") | |
| gr.Markdown(f"**Best model name:** {model_info.get('best_model_name', 'Unknown')}") | |
| gr.Markdown(f"**Test F1:** {model_info.get('test_f1', 'N/A')}") | |
| gr.Markdown(f"**Number of features:** {len(feature_names)}") | |
| with gr.Column(scale=2): | |
| gr.Markdown("### Input Features") | |
| inputs = [] | |
| for feature in feature_names: | |
| inputs.append( | |
| gr.Number( | |
| label=feature, | |
| value=0.0, | |
| precision=4 | |
| ) | |
| ) | |
| predict_btn = gr.Button("Predict Engine Condition", variant="primary") | |
| gr.Markdown("### Prediction Output") | |
| result_box = gr.Textbox(label="Prediction", interactive=False) | |
| proba_box = gr.Dataframe(label="Prediction Probabilities") | |
| predict_btn.click( | |
| fn=predict_engine_condition, | |
| inputs=inputs, | |
| outputs=[result_box, proba_box] | |
| ) | |
| demo.launch() |