ML-Project / app.py
QaziAbsaar's picture
Update app.py
7630c18 verified
Raw
History Blame Contribute Delete
3.18 kB
from __future__ import annotations
from pathlib import Path
import gradio as gr
import joblib
from taxi_fare import prepare_inference_frame
MODEL_PATH = Path("artifacts/taxi_fare_ann_model.joblib")
def load_model():
if not MODEL_PATH.exists():
raise FileNotFoundError(
f"Model file not found at {MODEL_PATH}. Train the model first with train.py."
)
return joblib.load(MODEL_PATH)
try:
model = load_model()
except FileNotFoundError:
model = None
def predict_fare(pickup_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude, passenger_count):
if model is None:
raise gr.Error("Model file is missing. Train the model first and place artifacts/taxi_fare_ann_model.joblib in the project.")
features = prepare_inference_frame(
pickup_datetime=pickup_datetime,
pickup_longitude=pickup_longitude,
pickup_latitude=pickup_latitude,
dropoff_longitude=dropoff_longitude,
dropoff_latitude=dropoff_latitude,
passenger_count=passenger_count,
)
prediction = float(model.predict(features)[0])
return round(max(prediction, 0.0), 2)
with gr.Blocks() as demo:
gr.Markdown(
"""
# NYC Taxi Fare Prediction
Predict taxi fare using an Artificial Neural Network trained on the NYC Taxi Fare Prediction dataset.
"""
)
with gr.Row():
pickup_datetime = gr.Textbox(
label="Pickup datetime",
value="2015-01-01 12:00:00",
placeholder="YYYY-MM-DD HH:MM:SS",
)
passenger_count = gr.Number(label="Passenger count", value=1, precision=0)
with gr.Row():
pickup_longitude = gr.Number(label="Pickup longitude", value=-73.985428)
pickup_latitude = gr.Number(label="Pickup latitude", value=40.748817)
with gr.Row():
dropoff_longitude = gr.Number(label="Dropoff longitude", value=-73.985130)
dropoff_latitude = gr.Number(label="Dropoff latitude", value=40.758896)
predict_button = gr.Button("Predict Fare")
output = gr.Number(label="Predicted fare amount ($)")
predict_button.click(
fn=predict_fare,
inputs=[
pickup_datetime,
pickup_longitude,
pickup_latitude,
dropoff_longitude,
dropoff_latitude,
passenger_count,
],
outputs=output,
)
gr.Examples(
examples=[
["2015-01-01 12:00:00", -73.985428, 40.748817, -73.985130, 40.758896, 1],
["2015-06-18 18:30:00", -73.985656, 40.758896, -73.971249, 40.7831, 2],
],
inputs=[
pickup_datetime,
pickup_longitude,
pickup_latitude,
dropoff_longitude,
dropoff_latitude,
passenger_count,
],
label="Sample trips",
)
if __name__ == "__main__":
# Some Gradio versions (on Spaces) may not accept the `theme` kwarg for `launch()`.
# Try to launch with the theme and fall back to a plain launch on TypeError.
try:
demo.launch(theme=gr.themes.Soft())
except TypeError:
demo.launch()