eogreen's picture
Upload app.py
63eb0c0 verified
raw
history blame
2.92 kB
from warnings import filterwarnings
filterwarnings('ignore')
import os
import uuid
import joblib
import json
import gradio as gr
import pandas as pd
from huggingface_hub import CommitScheduler
from pathlib import Path
import subprocess
# Run the training script
subprocess.run(["python", "train.py"])
print('done!')
# Configure the logging functionality
log_file = Path("logs/") / f"data_{uuid.uuid4()}.json"
log_folder = log_file.parent
repo_id = "eric-green-insurance-charge-predictor-logs"
# Create a commit scheduler
scheduler = CommitScheduler(
repo_id=repo_id,
repo_type="dataset",
folder_path=log_folder,
path_in_repo="data",
every=2
)
# Load the saved model
insurance_charge_predictor = joblib.load('model.joblib')
# Define the input features
#numeric_features = ['age', 'bmi', 'children']
#categorical_features = ['sex', 'smoker', 'region']
age_input = gr.Number(label="Age")
bmi_input = gr.Number(label="BMI")
children_input = gr.Number(label="Children")
# sex: ['female' 'male']
# smoker: ['yes' 'no']
# region: ['southwest' 'southeast' 'northwest' 'northeast']
sex_input = gr.Dropdown(['female','male'],label='Sex')
smoker_input = gr.Dropdown(['yes','no'],label='Smoker')
region_input = gr.Dropdown(['southwest', 'southeast', 'northwest', 'northeast'],label='Region')
model_output = gr.Label(label="charges")
# Define the predict function which will take features, convert to dataframe and make predictions using the saved model
# the functions runs when 'Submit' is clicked or when a API request is made
def predict_insurance_charges(age, bmi, children, sex, smoker, region):
sample = {
'Age': age,
'BMI': bmi,
'Children': children,
'Sex': sex,
'Smoker': smoker,
'Region': region
}
data_point = pd.DataFrame([sample])
prediction = insurance_charge_predictor.predict(data_point).tolist()
with scheduler.lock:
with log_file.open("a") as f:
f.write(json.dumps(
{
'Age': age,
'BMI': bmi,
'Children': children,
'Sex': sex,
'Smoker': smoker,
'Region': region,
'prediction': prediction[0]
}
))
f.write("\n")
return prediction[0]
gr_interface = gr.Interface(
fn=predict_insurance_charges,
inputs=[age_input,
bmi_input,
children_input,
sex_input,
smoker_input,
region_input],
outputs=model_output,
title="HealthyLife Insurance Charge Prediction",
description="This API allows you to predict insurance charges based on the input features.",
allow_flagging="auto",
concurrency_limit=8
)
gr_interface.queue()
gr_interface.launch(share=False)
print('*** Running train.py ***')