Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| # Function to simulate blood glucose changes over time | |
| def predict_glucose(current_glucose, meal_type, meal_time_hr, meal_time_min, galvus_dose, galvus_time_hr, galvus_time_min, exercise_duration, fast_carbs_ml, chocolate_time_min, prediction_time=3): | |
| # Constants for glucose reduction effects | |
| post_meal_reduction = 63.6 # mg/dL (avg reduction for Vildagliptin in 2 hours) | |
| fasting_reduction = 27.7 # mg/dL (avg reduction over 6-12 hours) | |
| # Convert meal time and Galvus time to minutes for easier calculations | |
| meal_time_total_min = meal_time_hr * 60 + meal_time_min | |
| galvus_time_total_min = galvus_time_hr * 60 + galvus_time_min | |
| # Adjust for fast carbs (milk, juice, etc.) | |
| carb_effect = fast_carbs_ml * 1.5 # Approximate glucose rise per mL of fast carbs | |
| # Calculate blood glucose over time considering meal type, Galvus dose, and exercise | |
| if meal_type == 'High-carb': | |
| glucose_after_meal = current_glucose + carb_effect + 60 # Higher glucose increase due to carbs | |
| elif meal_type == 'Protein-heavy': | |
| glucose_after_meal = current_glucose + 20 # Small glucose increase due to protein | |
| elif meal_type == 'Low-carb': | |
| glucose_after_meal = current_glucose - 10 # Small reduction due to low-carb meal | |
| elif meal_type == 'Fast carb': | |
| glucose_after_meal = current_glucose + carb_effect * 1.5 # Fast carbs like juice, milk increase glucose quickly | |
| else: | |
| glucose_after_meal = current_glucose # Normal meal with moderate carbs | |
| # Calculate glucose levels over 1 hour and 3 hours | |
| glucose_1hr = glucose_after_meal - post_meal_reduction + carb_effect * 0.5 # Adjust for carb effect | |
| glucose_3hr = glucose_1hr - fasting_reduction | |
| # Adjust the effects of Galvus based on its administration time (medication effect starts at galvus_time + 1-2 hours) | |
| time_since_galvus = meal_time_total_min - galvus_time_total_min | |
| if time_since_galvus >= 60: # After 1 hour, the effects of Galvus start kicking in | |
| glucose_3hr -= fasting_reduction # Galvus effect after 3 hours | |
| # Exercise effect on glucose (hypothetical value, may vary based on intensity) | |
| glucose_3hr -= exercise_duration * 2 # Exercise reduces glucose by 2 mg/dL per minute | |
| # Chocolate bar effect | |
| if chocolate_time_min <= 60: # If the chocolate bar is eaten within 1 hour | |
| glucose_1hr += 40 # Approximate glucose rise from chocolate | |
| glucose_3hr += 30 # This would still contribute to an increase at 3 hours | |
| # Plotting the graph of glucose prediction over time | |
| time_points = [0, 1, 3] # Time: 0 hours, 1 hour, 3 hours | |
| glucose_values = [current_glucose, glucose_1hr, glucose_3hr] | |
| plt.plot(time_points, glucose_values, marker='o', color='b') | |
| plt.title("Blood Glucose Prediction Over Time") | |
| plt.xlabel("Time (Hours)") | |
| plt.ylabel("Blood Glucose (mg/dL)") | |
| plt.xticks([0, 1, 2, 3]) | |
| plt.grid(True) | |
| plt.tight_layout() | |
| # Save the graph as a file to show it in Gradio | |
| plt.savefig('/tmp/blood_glucose_prediction.png') | |
| plt.close() | |
| # Return glucose predictions and the image file path | |
| return glucose_1hr, glucose_3hr, '/tmp/blood_glucose_prediction.png' | |
| # Gradio Interface | |
| def build_interface(): | |
| with gr.Blocks() as iface: | |
| gr.Markdown("# Blood Glucose Prediction Model (With Vildagliptin Effects)") | |
| # Inputs for current glucose, meal info, medication dose, exercise, fast carbs, and Galvus time | |
| with gr.Row(): | |
| current_glucose = gr.Number(label="Current Blood Glucose (mg/dL)", value=105) | |
| meal_type = gr.Radio(choices=["Normal", "High-carb", "Protein-heavy", "Low-carb", "Fast carb"], label="Meal Type", value="Low-carb") | |
| meal_time_hr = gr.Number(label="Last Meal Time (hours)", value=6) | |
| meal_time_min = gr.Number(label="Last Meal Time (minutes)", value=0) | |
| galvus_dose = gr.Number(label="Galvus Dose (mg)", value=50) | |
| galvus_time_hr = gr.Number(label="Galvus Time of Administration (hours)", value=2) | |
| galvus_time_min = gr.Number(label="Galvus Time of Administration (minutes)", value=0) | |
| exercise_duration = gr.Number(label="Exercise Duration (min)", value=60) | |
| fast_carbs_ml = gr.Number(label="Fast Carbs (mL)", value=0) | |
| chocolate_time_min = gr.Number(label="Time After Meal When Chocolate Bar Is Eaten (min)", value=60) | |
| # Output predictions and graph | |
| glucose_1hr_output = gr.Textbox(label="Predicted Glucose Level in 1 Hour (mg/dL)") | |
| glucose_3hr_output = gr.Textbox(label="Predicted Glucose Level in 3 Hours (mg/dL)") | |
| glucose_graph = gr.Image(label="Blood Glucose Prediction Graph") | |
| # Button to trigger prediction | |
| predict_button = gr.Button("Predict Blood Glucose") | |
| # Set button action | |
| predict_button.click( | |
| predict_glucose, | |
| inputs=[current_glucose, meal_type, meal_time_hr, meal_time_min, galvus_dose, galvus_time_hr, galvus_time_min, exercise_duration, fast_carbs_ml, chocolate_time_min], | |
| outputs=[glucose_1hr_output, glucose_3hr_output, glucose_graph] | |
| ) | |
| return iface | |
| # Build and launch the Gradio interface | |
| iface = build_interface() | |
| iface.launch() |