File size: 3,618 Bytes
b0b037e 1d7bb64 1a7c734 42dcdc4 1a7c734 42dcdc4 b0b037e 1a7c734 b0b037e 1a7c734 20df6cd 1a7c734 20df6cd 1a7c734 20df6cd 1a7c734 b0b037e 1a7c734 b0b037e 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 1a7c734 e62a4c7 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 1a7c734 42dcdc4 | 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | import streamlit as st
from transformers import pipeline
# =========================
# Page Configuration
# =========================
st.set_page_config(
page_title="Fitness Profile",
page_icon="🏋️",
layout="centered"
)
# =========================
# Load Model
# =========================
@st.cache_resource
def load_model():
return pipeline(
"text-generation",
model="google/flan-t5-base"
)
generator = load_model()
st.title("🏋️ Personalized Fitness Profile")
st.markdown("---")
# =========================
# 1️⃣ Personal Information
# =========================
st.header("1. Personal Information")
name = st.text_input("Name *")
gender = st.selectbox(
"Gender *",
["Male", "Female"]
)
height_cm = st.number_input(
"Height (in centimeters) *",
min_value=0.0,
format="%.2f"
)
weight_kg = st.number_input(
"Weight (in kilograms) *",
min_value=0.0,
format="%.2f"
)
# =========================
# BMI Calculation
# =========================
# =========================
# BMI Calculation
# =========================
def calculate_bmi(height_cm, weight_kg):
if height_cm > 0 and weight_kg > 0:
height_m = height_cm / 100
return weight_kg / (height_m ** 2)
return 0 # Always return something
def bmi_category(bmi):
if bmi < 18.5:
return "Underweight"
elif 18.5 <= bmi < 25:
return "Normal weight"
elif 25 <= bmi < 30:
return "Overweight"
else:
return "Obese"
# ALWAYS define bmi safely
bmi = 0
if height_cm > 0 and weight_kg > 0:
bmi = calculate_bmi(height_cm, weight_kg)
st.info(f"Your BMI is: {bmi:.2f} ({bmi_category(bmi)})")
# =========================
# 2️⃣ Fitness Details
# =========================
st.header("2. Fitness Details")
fitness_goal = st.selectbox(
"Fitness Goal",
["Build Muscle", "Weight Loss", "Strength Gain", "Abs Building", "Flexible"]
)
equipment = st.multiselect(
"Available Equipment (Multiple selection allowed)",
["Dumbbells", "Resistance Band", "Yoga Mat", "No Equipment"]
)
fitness_level = st.radio(
"Fitness Level",
["Beginner", "Intermediate", "Advanced"],
horizontal=True
)
st.markdown("---")
# =========================
# Submit Button
# =========================
if st.button("Submit Profile"):
if not name:
st.error("Please enter your name.")
elif height_cm <= 0 or weight_kg <= 0:
st.error("Please enter valid height and weight.")
elif not equipment:
st.error("Please select at least one equipment option.")
else:
st.success("✅ Profile Submitted Successfully!")
bmi_status = bmi_category(bmi)
equipment_list = ", ".join(equipment)
prompt = f"""
Generate a 5-day structured workout plan.
User Details:
Name: {name}
Gender: {gender}
BMI: {bmi:.2f} ({bmi_status})
Goal: {fitness_goal}
Fitness Level: {fitness_level}
Available Equipment: {equipment_list}
Requirements:
- Include warmup
- Include exercises with sets and reps
- Include rest time
- Adjust intensity based on BMI and fitness level
- Keep it structured day-wise
"""
with st.spinner("Generating your AI workout plan..."):
result = generator(
prompt,
max_new_tokens=400,
do_sample=True,
temperature=0.7
)[0]["generated_text"]
st.subheader("🏋️ Your Personalized Workout Plan")
st.write(result)
|