Amrutha04 commited on
Commit
f4e0710
·
verified ·
1 Parent(s): 3bf9177

Delete src

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +0 -170
src/streamlit_app.py DELETED
@@ -1,170 +0,0 @@
1
- import streamlit as st
2
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
- import torch
4
-
5
- # 1. Page Configuration
6
- st.set_page_config(page_title="Fitness Profile Generator", layout="wide")
7
-
8
- # 2. Load AI Model (Large Version)
9
- @st.cache_resource
10
- def load_model():
11
- # Note: flan-t5-large is ~3GB. Ensure your Hugging Face Space has enough RAM.
12
- tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-large")
13
- model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-large")
14
- return tokenizer, model
15
-
16
- tokenizer, model = load_model()
17
-
18
- # 3. Custom Styling (Gradient and Black Sidebar)
19
- st.markdown("""
20
- <style>
21
- .stApp {
22
- background: linear-gradient(135deg, #f6d365 0%, #fda085 100%);
23
- background-attachment: fixed;
24
- }
25
- section[data-testid="stSidebar"] {
26
- background-color: #000000 !important;
27
- }
28
- section[data-testid="stSidebar"] h1, section[data-testid="stSidebar"] p {
29
- color: #FFFFFF !important;
30
- }
31
- h1, h2, h3, p, label {
32
- color: #2D3436 !important;
33
- font-weight: 600;
34
- }
35
- div[data-baseweb="input"], div[data-baseweb="select"] {
36
- background-color: rgba(255, 255, 255, 0.9) !important;
37
- border-radius: 8px !important;
38
- }
39
- .stButton > button {
40
- background-color: #004d57 !important;
41
- color: white !important;
42
- border-radius: 8px !important;
43
- padding: 10px 24px !important;
44
- font-weight: bold !important;
45
- width: 100% !important;
46
- border: none !important;
47
- }
48
- .result-card {
49
- background-color: white;
50
- padding: 25px;
51
- border-radius: 15px;
52
- box-shadow: 0 10px 25px rgba(0,0,0,0.1);
53
- margin-top: 25px;
54
- border-left: 10px solid #004d57;
55
- }
56
- </style>
57
- """, unsafe_allow_html=True)
58
-
59
- # --- SIDEBAR ---
60
- with st.sidebar:
61
- st.markdown("# 👤 Personalised Fitness Plan Generator")
62
- st.write("---")
63
- st.write("Your digital coach for a healthier lifestyle.")
64
-
65
- # --- MAIN CONTENT ---
66
- st.title("🏋️ Create Your Fitness Profile")
67
-
68
- # SECTION 1: PERSONAL INFORMATION
69
- st.markdown("### 1️⃣ Personal Information")
70
- col_name, col_gender, col_age = st.columns([2, 1, 1])
71
- with col_name:
72
- name = st.text_input("Full Name *", placeholder="e.g. John Doe")
73
- with col_gender:
74
- gender = st.selectbox("Gender *", ["Male", "Female", "Other"])
75
- with col_age:
76
- age = st.number_input("Age *", min_value=1, max_value=120, value=25)
77
-
78
- col_h, col_w = st.columns(2)
79
- with col_h:
80
- height_cm = st.number_input("Height in centimeters *", min_value=0.0, step=0.1)
81
- with col_w:
82
- weight_kg = st.number_input("Weight in kilograms *", min_value=0.0, step=0.1)
83
-
84
- st.write("---")
85
-
86
- # SECTION 2: FITNESS DETAILS
87
- st.markdown("### 2️⃣ Fitness Details")
88
- col_goal, col_level = st.columns(2)
89
- with col_goal:
90
- goal = st.selectbox("Fitness Goal", ["Build Muscle", "Weight Loss", "Strength Gain", "Abs Building", "Flexible"])
91
- with col_level:
92
- fitness_level = st.selectbox("Fitness Level", ["Beginner", "Intermediate", "Advanced"])
93
-
94
- equipment = st.multiselect(
95
- "Available Equipment *",
96
- ["Dumbbells", "Resistance Band", "Yoga Mat", "Kettlebells", "Pull-up Bar", "No Equipment"],
97
- default=["No Equipment"]
98
- )
99
-
100
- st.write("---")
101
-
102
- # --- SUBMIT BUTTON & LOGIC ---
103
- if st.button("Submit Profile"):
104
- if not name:
105
- st.error("Please enter your name.")
106
- elif height_cm <= 0 or weight_kg <= 0:
107
- st.error("Please enter valid height and weight.")
108
- elif not equipment:
109
- st.error("Please select at least one equipment option.")
110
- else:
111
- height_m = height_cm / 100
112
- bmi = weight_kg / (height_m ** 2)
113
- bmi_rounded = round(bmi, 2)
114
-
115
- if bmi_rounded < 18.5:
116
- bmi_status, status_color = "Underweight", "#3498db"
117
- elif 18.5 <= bmi_rounded < 25:
118
- bmi_status, status_color = "Normal", "#2ecc71"
119
- elif 25 <= bmi_rounded < 30:
120
- bmi_status, status_color = "Overweight", "#f1c40f"
121
- else:
122
- bmi_status, status_color = "Obese", "#e74c3c"
123
-
124
- st.success("Profile Submitted Successfully!")
125
-
126
- st.markdown(f"""
127
- <div class="result-card">
128
- <h2 style="color: #004d57; margin-top:0;">Assessment for {name}</h2>
129
- <p>{gender} | {age} Years Old</p>
130
- <p>Calculated BMI: <strong>{bmi_rounded}</strong> | Category: <span style="color: {status_color}; font-weight: bold;">{bmi_status}</span></p>
131
- </div>
132
- """, unsafe_allow_html=True)
133
-
134
- # 5. AI Prompt Preparation (Slightly adjusted for better logic)
135
- equipment_list = ", ".join(equipment)
136
- prompt = f"""Task: Create a detailed 5-day workout plan for a {gender} with a BMI of {bmi_rounded} ({bmi_status}).
137
- Goal: {goal}
138
- Level: {fitness_level}
139
- Available Equipment: {equipment_list}
140
-
141
- Instructions: Provide a structured routine for Day 1, Day 2, Day 3, Day 4, and Day 5. Include exercises and rest days.
142
-
143
- Workout Plan:
144
- Day 1:"""
145
-
146
- # 6. AI Generation (Using Optimized Parameters)
147
- with st.spinner("Generating your AI workout plan..."):
148
- try:
149
- inputs = tokenizer(prompt, return_tensors="pt", truncation=True)
150
-
151
- outputs = model.generate(
152
- **inputs,
153
- max_new_tokens=512, # 512 is usually enough for T5-Large
154
- min_new_tokens=150, # Forces the model to provide a longer response
155
- do_sample=True,
156
- temperature=0.8, # Slight increase for variety
157
- top_p=0.9,
158
- repetition_penalty=2.0 # Prevents it from getting stuck on one phrase
159
- )
160
-
161
- result = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
162
-
163
- # Prepending "Day 1:" because the prompt cuts off there
164
- final_plan = "Day 1: " + result
165
-
166
- st.subheader(" Your Personalized Workout Plan")
167
- st.write(final_plan)
168
- except Exception as e:
169
- st.error(f"AI Generation failed: {e}")
170
-