| |
| 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 |
|
|
|
|
| |
| log_file = Path("logs/") / f"data_{uuid.uuid4()}.json" |
| log_folder = log_file.parent |
|
|
| scheduler = CommitScheduler( |
| repo_id="Insurance_Charge_Prediction_Project", |
| repo_type="dataset", |
| folder_path=log_folder, |
| path_in_repo="data", |
| every=2 |
| ) |
|
|
| charges_predictor = joblib.load('model.joblib') |
|
|
| age_input = gr.Number(label='Age') |
| bmi_input = gr.Number(label='BMI') |
| children_input = gr.Number(label='Children') |
| sex_input = gr.Dropdown(['male', 'female'], value='N/A', label='Sex') |
| smoker_input = gr.Dropdown(['yes', 'no'], value='N/A', label="Smoker") |
| region_input = gr.Dropdown(['southeast', 'southwest', 'northeast', 'northwest'], |
| value='N/A', label='Region') |
|
|
|
|
| model_output = gr.Label(label='Charges') |
|
|
| |
| def predict_charges(age, bmi, children, sex, smoker, region, prediction): |
| sample = { |
| 'age': age, |
| 'bmi': bmi, |
| 'children': children, |
| 'sex': sex, |
| 'smoker': smoker, |
| 'region': region, |
| 'prediction': prediction |
| } |
| data_point = pd.DataFrame([sample]) |
| print('data point: ', data_point) |
| prediction = charges_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] |
|
|
|
|
| |
| demo = gr.Interface( |
| fn=predict_charges, |
| inputs=[age_input, bmi_input, |
| children_input, sex_input, smoker_input, region_input], |
| outputs=model_output, |
| title=" Insurance Charge Prediction", |
| description="This API allows you to predict the appropiate charges for each patient", |
| flagging_mode="manual", |
| concurrency_limit=8 |
| ) |
|
|
| |
| demo.queue() |
| demo.launch(share=False) |
|
|