Nutritionist / app.py
iffxahmad's picture
Update app.py
69d72e8 verified
import streamlit as st
import anthropic
import os
# Function to get a meal and exercise plan from Claude AI
def get_nutrition_and_exercise_plan(name, age, gender, height, weight, medical_conditions, medications,
dietary_restrictions, health_goals, meal_plan_preferences, meal_frequency,
cuisine_preferences):
# Directly use the API key
api_key = os.getenv('anthropy')
client = anthropic.Client(api_key=api_key)
prompt = f"""{anthropic.HUMAN_PROMPT}
You are a world-class nutritionist and fitness expert. Based on the following details, generate a personalized meal plan and exercise plan:
**Personal Information**
- Name: {name}
- Age: {age}
- Gender: {gender}
- Height: {height} cm
- Weight: {weight} kg
**Health and Medical Information**
- Medical Conditions: {medical_conditions}
- Medications: {medications}
- Dietary Restrictions: {dietary_restrictions}
- Health Goals: {health_goals}
**Personalized Settings**
- Meal Plan Preferences: {meal_plan_preferences}
- Meal Frequency: {meal_frequency} meals/day
- Cuisine Preferences: {', '.join(cuisine_preferences)}
**Instructions**
- Provide a detailed meal plan including breakfast, lunch, dinner, and snack options for one day.
- Ensure the meals are balanced and aligned with the health goals and dietary restrictions.
- Provide a detailed exercise plan including various exercises, their duration, and instructions suitable for the user's health goals and medical conditions.
- Present the information in clear and organized markdown format with appropriate headings and bullet points.
{anthropic.AI_PROMPT}"""
response = client.completions.create(
prompt=prompt,
model="claude-2",
max_tokens_to_sample=1000,
temperature=0.7,
)
return response.completion
# Streamlit app layout
st.set_page_config(page_title="Nutritionist Iftikhar Ahmad", page_icon="🍎", layout="wide")
# Header with custom background color
st.markdown(
"""
<style>
.main-header {
background-color: #03bafc;
padding: 20px;
color: white;
text-align: center;
border-radius: 5px;
}
.sidebar .sidebar-content {
background-color: #f0f2f6;
padding: 10px;
border-radius: 10px;
}
.stButton>button {
background-color: #03bafc;
color: white;
padding: 10px;
border-radius: 5px;
}
</style>
""", unsafe_allow_html=True
)
# Main title with a logo
st.markdown('<div class="main-header"><h1>🍎 Welcome! This is Nutritionist Iftikhar Ahmad</h1></div>', unsafe_allow_html=True)
st.markdown("### Your Personalized Diet and Exercise Plan")
# Sidebar for user input
with st.sidebar:
st.header("Personal Information")
name = st.text_input("Name")
age = st.number_input("Age", min_value=0, step=1)
gender = st.selectbox("Gender", ["Male", "Female", "Other"])
height = st.number_input("Height (cm)", min_value=0, step=1)
weight = st.number_input("Weight (kg)", min_value=0.0, step=0.1)
st.header("Health and Medical Information")
medical_conditions = st.selectbox("Medical Conditions", ["Diabetes", "Hypertension", "Fit"])
dietary_restrictions = st.selectbox("Dietary Restrictions", ["Vegetarian", "Vegan", "Gluten-Free"])
health_goals = st.selectbox("Health Goals", ["Weight Loss", "Muscle Gain"])
medications = st.text_area("Medications and Supplements")
st.header("Personalized Settings")
meal_plan_preferences = st.selectbox("Meal Plan Preferences", ["Low Carb", "High Protein", "Balanced", "Mediterranean", "Keto", "Paleo"])
meal_frequency = st.slider("Meal Frequency (meals per day)", 1, 6, 3)
cuisine_preferences = st.multiselect("Cuisine Preferences", ["Asian", "Mediterranean", "Italian", "Mexican", "Indian", "Middle Eastern", "American", "Other"])
# Main section to display results
if st.button("Generate Personalized Plan"):
if not all([name, age, gender, height, weight, health_goals]):
st.error("Please fill out all required fields in the sidebar.")
else:
with st.spinner("Generating your personalized plan..."):
try:
plan_response = get_nutrition_and_exercise_plan(
name, age, gender, height, weight, medical_conditions, medications,
dietary_restrictions, health_goals, meal_plan_preferences, meal_frequency, cuisine_preferences
)
st.subheader("Your Personalized Meal and Exercise Plan")
st.markdown(plan_response)
except Exception as e:
st.error(f"An error occurred: {e}")
# Footer with copyright and year
st.markdown("---")
st.markdown('<div style="text-align: center;">Β© 2024 Nutritionist Iftikhar Ahmad. All rights reserved.</div>', unsafe_allow_html=True)