File size: 2,975 Bytes
3237b39
a5aa636
 
 
 
 
3237b39
 
 
 
a5aa636
 
3237b39
a5aa636
 
 
 
c67d4ff
a5aa636
3237b39
a5aa636
c67d4ff
a5aa636
c67d4ff
 
a5aa636
c67d4ff
 
 
 
 
 
 
a5aa636
3237b39
 
 
 
 
 
 
 
 
 
 
 
 
a5aa636
3237b39
 
 
 
c67d4ff
 
 
 
 
 
 
 
 
 
 
 
 
 
3237b39
 
a5aa636
 
 
3237b39
 
 
 
 
 
 
 
 
a5aa636
3237b39
 
 
a5aa636
 
3237b39
 
 
 
 
 
 
 
a5aa636
 
 
 
 
3237b39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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

# Run the training script placed in the same directory as app.py
# The training script will train and persist a logistic regression
# model with the filename 'model.joblib'

os.system("python train.py")

# # Load the freshly trained model from disk

insurance_charge_predictor = joblib.load('model.joblib')

# # Prepare the logging functionality

# log_file = Path("logs/") / f"data_{uuid.uuid4()}.json"
# log_folder = log_file.parent

# scheduler = CommitScheduler(
#     repo_id="insurance-charge-logs",
#     repo_type="dataset",
#     folder_path=log_folder,
#     path_in_repo="data",
#     every=2
# )

# Define the predict function that runs when 'Submit' is clicked or when a API request is made
def predict_insurance_charge(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()

    # While the prediction is made, log both the inputs and outputs to a local log file
    # While writing to the log file, ensure that the commit scheduler is locked to avoid parallel
    # access
    
    # 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 round(prediction[0],2)

# Set up UI components for input and output

age_input = gr.Number(label='age')
bmi_input = gr.Number(label='bmi')
children_input = gr.Number(label='children')
sex_input = gr.Dropdown(['female','male'],label='sex')
smoker_input = gr.Dropdown(['yes','no'],label='smoker')
region_input = gr.Dropdown(
    ['southeast', 'southwest', 'northwest', 'northeast'],
    label='region'
)

model_output = gr.Label(label="Insurance Charges")

# Create the interface
demo = gr.Interface(
    fn=predict_insurance_charge,
    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 the estimating insurance charges based on customer attributes",
    examples=[[33,33.44,5,'male','no','southeast'],
              [58,25.175,0,'male','no','northeast'],
              [52,38.380,2,'female','no','northeast']],
    concurrency_limit=16
)

# Launch with a load balancer
demo.queue()
demo.launch(share=False)