# Import the required Libraries import gradio as gr import numpy as np import pandas as pd import os, joblib import re current_directory = os.path.dirname(os.path.realpath(__file__)) pipeline_path = os.path.join(current_directory, 'toolkit', 'pipeline.joblib') # pipeline = joblib.load(r'toolkit\pipeline.joblib') pipeline = joblib.load(pipeline_path) inputs = ['Origin_lat', 'Origin_lon', 'Destination_lat', 'Destination_lon', 'Trip_distance', 'Speed', 'dewpoint_2m_temperature', 'mean_2m_air_temperature', 'pickup_weekday', 'pickup_weekofyear', 'pickup_hour', 'pickup_minute', 'pickup_week_hour', 'month', 'day_of_week', 'cluster_id', 'target_transformed', 'temperature_range', 'wind_speed', 'rain'] def predict(*args, pipeline=pipeline, inputs=inputs): # Check if inputs is provided if inputs is None: raise ValueError("Please provide the 'inputs' parameter.") # Creating a DataFrame of inputs input_data = pd.DataFrame([args], columns=inputs) print(input_data) # Modeling try: model_output = abs(int(pipeline.predict(input_data))) except Exception as e: print(f"Error during prediction: {str(e)}") model_output = 0 output_str = 'Hey there, Your ETA is' dist = 'seconds' return f"{output_str} {model_output} {dist}" with gr.Blocks(theme=gr.themes.Monochrome()) as app: gr.Markdown("# ETA PREDICTION") gr.Markdown("""This app uses a machine learning model to predict the ETA of trips on the Yassir Hailing App.Refer to the expander at the bottom for more information on the inputs.""") with gr.Row(): origin_lat= gr.Slider(2.806,3.381,step = 0.01,interactive=True, value=2.806, label = 'origin_lat') origin_lon = gr.Slider(36.589,36.820,step =0.01,interactive=True, value=36.589,label = 'origin_lon') Destination_lat =gr.Slider(2.807,3.381,step = 0.1,interactive=True, value=2.81,label ='Destination_lat') Destination_lon =gr.Slider(36.592,36.819,step = 0.1,interactive=True, value=36.596,label ='Destination_lon') Trip_distance = gr.Slider(61,958,step =10,interactive=True, value=20,label = 'Trip_distance') Speed = gr.Slider(0.300,85.000, step=0.01, interactive=True, value=20, label = 'Speed') with gr.Column(): dewpoint_2m_temperature =gr.Slider(280.000, 288.000, step = 0.01,interactive=True, value=282.201,label ='dewpoint_2m_temperature') mean_2m_air_temperature =gr.Slider(285.203, 291.110,step = 0.1,interactive=True, value=287.203,label ='mean_2m_air_temperature') pickup_weekday = gr.Dropdown([0,1,2,3,4,5,6],label ='pickup_weekday', value=3) pickup_weekofyear = gr.Dropdown([47,48,49,50],label="pickup_weekofyear",value=3) pickup_hour = gr.Dropdown([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] ,label="pickup_hour",value=13) pickup_minute = gr.Slider(0, 59, step = 1,interactive=True, value=5,label ='pickup_minute') pickup_week_hour = gr.Slider(0, 167, step = 1,interactive=True, value=5,label ='pickup_week_hour') month = gr.Dropdown([11,12],label = 'month') day_of_week = gr.Dropdown([0,1,2,3,4,5,6],label ='day_of_week', value=3) cluster_id = gr.Dropdown([1,2,3,4,5,6,7],label="Cluster ID", value=4) with gr.Column(): target_transformed = gr.Slider(0, 336.426, step = 0.01,interactive=True, value=100,label ='target_transformed') temperature_range = gr.Slider(2.317, 9.166, step = 0.01,interactive=True, value=5,label='temperature_range') wind_speed = gr.Slider(0.803, 9.887, step = 0.01,interactive=True, value=5,label='wind_speed') rain = gr.Dropdown([0,1],label='rain') with gr.Row(): btn = gr.Button("Predict") output = gr.Textbox(label="Prediction") # Expander for more info on columns with gr.Accordion("Information on inputs"): gr.Markdown("""These are information on the inputs the app takes for predicting a rides ETA. - origin_lat: Origin in degree latitude) - origin_lon: Origin in degree longitude - Destination_lat: Destination latitude - Destination_lon: Destination logitude - Trip Distance : Distance in meters on a driving route - Cluster ID : Select the cluster within which you started your trip - Time of the day: What time in the day did your trip start, 1- morning(or daytime),2 - evening 3- midnight """) btn.click(fn = predict,inputs= [origin_lat, origin_lon, Destination_lat, Destination_lon, Trip_distance, Speed, dewpoint_2m_temperature, mean_2m_air_temperature, pickup_weekday, pickup_weekofyear, pickup_hour, pickup_minute, pickup_week_hour, month, day_of_week, cluster_id, target_transformed, temperature_range, wind_speed, rain], outputs = output) app.launch(share = True, debug =True)