from flask import Flask, render_template, request import os import google.generativeai as genai import markdown # To convert Markdown to HTML from bs4 import BeautifulSoup # For post-processing HTML app = Flask(__name__) # Set and configure the Google API key os.environ["GOOGLE_API_KEY"] = 'AIzaSyCh5ePMjn6WDWhMMZwA7A0JI9HaZj2FmhA' genai.configure(api_key=os.getenv('GOOGLE_API_KEY')) # Function to calculate BMI def calculate_bmi(weight, height): return weight / (height * height) # Function to classify BMI into categories def classify_bmi(bmi): if bmi < 18.5: return "Underweight" elif 18.5 <= bmi < 25: return "Normal weight" elif 25 <= bmi < 30: return "Overweight" else: return "Obese" # Function to pre-process the HTML output: add CSS classes to table elements def preprocess_html_table(html): soup = BeautifulSoup(html, "html.parser") for table in soup.find_all("table"): # You can add any classes you need; here, we add Bootstrap styling classes as an example. table['class'] = table.get('class', []) + ["table", "table-striped", "table-bordered"] return str(soup) @app.route("/", methods=["GET", "POST"]) def index(): recommendation_html = None if request.method == "POST": try: age = int(request.form.get("age")) height = float(request.form.get("height")) weight = float(request.form.get("weight")) except (TypeError, ValueError): recommendation_html = "

Invalid input. Please try again.

" return render_template("index.html", recommendation=recommendation_html) target = request.form.get("target") level = request.form.get("level") # Calculate BMI and classify the category bmi = calculate_bmi(weight, height) bmi_category = classify_bmi(bmi) # Create a prompt for the Gemini model prompt = ( f"User details: Age: {age}, Height: {height}m, Weight: {weight}kg, " f"BMI: {bmi:.2f}, Category: {bmi_category}, Target: {target}, Level: {level}. " "Based on these details, generate a Markdown-formatted output that includes two sections: \n\n" "1. **Exercise Suggester Table:** Create a table with columns such as Exercise, Reps, Sets, and Duration (or any other relevant details). \n\n" "2. **1-Week Gym Workout Planner:** Provide a comprehensive day-by-day workout planner for one week, formatted clearly in Markdown. \n\n" "Ensure the Markdown output is properly formatted and easy to read." ) model = genai.GenerativeModel('gemini-1.5-flash') response = model.generate_content(prompt) # Convert the Markdown output to HTML with table support recommendation_html = markdown.markdown( response.text, extensions=["tables", "fenced_code"] ) # Pre-process the HTML to adjust the table formatting (e.g., add CSS classes) recommendation_html = preprocess_html_table(recommendation_html) return render_template("index.html", recommendation=recommendation_html) if __name__ == "__main__": app.run(debug=True, port=4529)