Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import joblib | |
| from datetime import datetime, timedelta | |
| # Load model and label encoders | |
| model = joblib.load("best_model.pkl") | |
| le_operation_type = joblib.load("le_operation_type.pkl") | |
| le_operator_id = joblib.load("le_operator_id.pkl") | |
| def predict_end_date(start_date_str, quantity, operation_type, operator_id, day_of_week): | |
| try: | |
| start_date = datetime.strptime(start_date_str, "%d-%m-%Y") | |
| except ValueError: | |
| return "Error: Start Date must be in DD-MM-YYYY format" | |
| # Encode categorical inputs | |
| try: | |
| operation_code = le_operation_type.transform([operation_type])[0] | |
| except ValueError: | |
| return f"Unknown Operation Type: {operation_type}" | |
| try: | |
| operator_code = le_operator_id.transform([operator_id])[0] | |
| except ValueError: | |
| return f"Unknown Operator ID: {operator_id}" | |
| # Feature engineering | |
| quantity_log = np.log1p(quantity) | |
| quantity_log_squared = quantity_log ** 2 | |
| quantity_operation_interaction = quantity_log * operation_code | |
| quantity_operator_interaction = quantity_log * operator_code | |
| # Create feature vector for prediction | |
| X = np.array([[ | |
| quantity_log, | |
| quantity_log_squared, | |
| quantity_operation_interaction, | |
| quantity_operator_interaction, | |
| operation_code, | |
| operator_code, | |
| day_of_week | |
| ]]) | |
| pred_days = model.predict(X)[0] | |
| whole_days = int(pred_days) | |
| fractional_day = pred_days - whole_days | |
| total_seconds = fractional_day * 24 * 3600 | |
| hours = int(total_seconds // 3600) | |
| minutes = int((total_seconds % 3600) // 60) | |
| est_end_datetime = start_date + timedelta(days=whole_days, hours=hours, minutes=minutes) | |
| est_end_date_str = est_end_datetime.strftime("%d-%m-%Y %H:%M") | |
| duration_str = f"{whole_days} days, {hours} hours, {minutes} minutes" | |
| return f"Estimated End Date & Time: {est_end_date_str}\nEstimated Duration: {duration_str}" | |
| # Build Gradio interface | |
| def gradio_interface(start_date, quantity, operation_type, operator_id, day_of_week): | |
| return predict_end_date(start_date, quantity, operation_type, operator_id, day_of_week) | |
| operation_options = list(le_operation_type.classes_) | |
| operator_options = list(le_operator_id.classes_) | |
| iface = gr.Interface( | |
| fn=gradio_interface, | |
| inputs=[ | |
| gr.Textbox(label="Start Date (DD-MM-YYYY)", value="21-07-2025"), | |
| gr.Number(label="Quantity", value=6000), | |
| gr.Dropdown(choices=operation_options, label="Operation Type", value=operation_options[0]), | |
| gr.Dropdown(choices=operator_options, label="Operator ID", value=operator_options[0]), | |
| gr.Slider(minimum=0, maximum=6, step=1, label="Day of Week (0=Monday, 6=Sunday)", value=1) | |
| ], | |
| outputs="text", | |
| title="Manufacturing Scheduler Prediction", | |
| description="Predict the estimated end date and duration of a manufacturing job based on input parameters." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |