| |
| 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", value=25) |
| bmi_input = gr.Number(label="BMI", value=25) |
| children_input = gr.Number(label="Children", value=0) |
|
|
| sex_input = gr.Dropdown( |
| ["male", "female"], |
| value="male", |
| label="Sex" |
| ) |
|
|
| smoker_input = gr.Dropdown( |
| ["yes", "no"], |
| value="no", |
| label="Smoker" |
| ) |
|
|
| region_input = gr.Dropdown( |
| ["southeast", "southwest", "northeast", "northwest"], |
| value="southeast", |
| label="Region" |
| ) |
|
|
|
|
| model_output = gr.Textbox(label="Predicted Insurance Cost") |
|
|
|
|
| def predict_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 = 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 f"${prediction[0]:,.2f}" |
|
|
|
|
| demo = gr.Interface( |
| fn=predict_charges, |
| inputs=[ |
| age_input, |
| bmi_input, |
| children_input, |
| sex_input, |
| smoker_input, |
| region_input |
| ], |
| outputs=model_output, |
| title="HealthyLife Insurance Charge Prediction", |
| description="Predict the insurance medical charges based on patient information", |
| flagging_mode="manual", |
| concurrency_limit=8 |
| ) |
|
|
|
|
| demo.queue() |
| demo.launch() |