| | import streamlit as st |
| | from model_api import query_model |
| | from prompt_builder import build_prompt |
| |
|
| | |
| | |
| | |
| | st.set_page_config(page_title="FitPlan AI", layout="centered") |
| |
|
| | st.title("ποΈ FitPlan AI β Personalized Workout Generator") |
| |
|
| | |
| |
|
| | name = st.text_input("Enter Your Name") |
| |
|
| | age = st.number_input( |
| | "Age (years)", |
| | min_value=10, |
| | max_value=100, |
| | step=1 |
| | ) |
| |
|
| | gender = st.radio("Gender", ["Male", "Female"]) |
| |
|
| | height = st.number_input( |
| | "Height (cm)", |
| | min_value=100.0, |
| | max_value=250.0 |
| | ) |
| |
|
| | weight = st.number_input( |
| | "Weight (kg)", |
| | min_value=30.0, |
| | max_value=200.0 |
| | ) |
| |
|
| | goal = st.selectbox( |
| | "Fitness Goal", |
| | ["Build Muscle", "Lose Weight", "Improve Endurance", "General Fitness"] |
| | ) |
| |
|
| | fitness_level = st.radio( |
| | "Fitness Level", |
| | ["Beginner", "Intermediate", "Advanced"] |
| | ) |
| |
|
| | equipment = st.multiselect( |
| | "Available Equipment", |
| | [ |
| | "No Equipment", "Dumbbells", "Barbell", |
| | "Pull-up Bar", "Resistance Bands", |
| | "Treadmill", "Kettlebells", "Full Gym" |
| | ] |
| | ) |
| |
|
| | |
| |
|
| | if st.button("Generate Workout Plan"): |
| |
|
| | |
| | if not name.strip(): |
| | st.warning("Please enter your name.") |
| |
|
| | elif age <= 0: |
| | st.warning("Please enter a valid age.") |
| |
|
| | elif height <= 0 or weight <= 0: |
| | st.warning("Please enter valid height and weight.") |
| |
|
| | else: |
| | |
| | prompt, bmi, bmi_status = build_prompt( |
| | name, |
| | age, |
| | gender, |
| | height, |
| | weight, |
| | goal, |
| | fitness_level, |
| | equipment |
| | ) |
| |
|
| | with st.spinner("Generating your personalized plan..."): |
| | response = query_model(prompt) |
| |
|
| | |
| | st.subheader("π Your Personalized Workout Plan") |
| | st.write(response) |
| |
|
| | st.info( |
| | f""" |
| | **Profile Summary** |
| | - Name: {name} |
| | - Age: {age} |
| | - Gender: {gender} |
| | - BMI: {bmi:.2f} ({bmi_status}) |
| | - Goal: {goal} |
| | - Level: {fitness_level} |
| | """ |
| | ) |