Evoflow / app.py
ositamiles's picture
Update app.py
dc3d836 verified
import json
import uuid
import requests
import streamlit as st
# Set up page configuration
st.set_page_config(
page_title="SlimFit Coach",
layout="wide",
page_icon="🌊",
)
# Generate or load existing session ID
if "id" not in st.session_state:
st.session_state.id = str(uuid.uuid4()).lower()
# Title of the app
st.title("SlimFit Coach")
# Sidebar customization options
st.sidebar.title("SlimFit Coach Settings")
# Default Messages Section
with st.sidebar.expander("Default Messages", expanded=True):
welcome_message = st.text_area(
"Welcome Message",
value="Hello! I’m SlimFit Coach, your personal weight loss coach. How can I assist you on your journey to achieving your weight loss goals?",
height=100,
)
# Default Question Section
with st.sidebar.expander("Default Question", expanded=True):
if st.button("Add Question"):
st.session_state.default_question = st.text_area(
"Question",
value='''- "Objective: What are the main weight loss goals you're aiming to achieve? (For example, specific weight loss target, fitness improvement, etc.?)"''',
height=200,
)
# Coaching Style Section
with st.sidebar.expander("Coaching Style", expanded=True):
# Function to create dual-label sliders with total 100
def dual_slider(label_left, label_right, default_val):
slider_val = st.slider(f"{label_left}{label_right}", 0, 100, default_val)
return slider_val, 100 - slider_val
# Sliders for promptValues parameters
question_val, advice_val = dual_slider("Question", "Advice", 50)
gentle_val, direct_val = dual_slider("Gentle", "Direct", 50)
short_val, long_val = dual_slider("Short", "Long", 50)
accepting_val, challenging_val = dual_slider("Accepting", "Challenging", 50)
serious_val, light_hearted_val = dual_slider("Serious", "Light hearted", 50)
# Display the calculated values for verification (Optional)
st.markdown(f"**Question**: {question_val}, **Advice**: {advice_val}")
st.markdown(f"**Gentle**: {gentle_val}, **Direct**: {direct_val}")
st.markdown(f"**Short**: {short_val}, **Long**: {long_val}")
st.markdown(f"**Accepting**: {accepting_val}, **Challenging**: {challenging_val}")
st.markdown(f"**Serious**: {serious_val}, **Light hearted**: {light_hearted_val}")
# Main chat-like interface
API_URL = "https://startrz-ai-agent.hf.space/api/v1/prediction/05225105-b77e-4366-b536-662139dc1e98"
# Function to query the new API
def query(payload):
try:
response = requests.post(API_URL, json=payload)
response.raise_for_status() # Raise an exception for HTTP errors
return response.json()
except requests.exceptions.RequestException as e:
return {"error": str(e)}
# Initialize session state for messages if not already set
if "messages" not in st.session_state:
st.session_state.messages = []
# Display previous messages
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Handle new user input
if prompt := st.chat_input("Message SlimFit Coach"):
# Append user message to session state
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
# Placeholder for AI response
with st.spinner(text='Querying SlimFit Coach...'):
with st.chat_message("assistant"):
message_placeholder = st.empty()
payload = {
"question": prompt,
"overrideConfig": {
"sessionId": st.session_state.id,
"promptValues": {
"text": "{{question}}",
"question": question_val,
"advice": advice_val,
"gentle": gentle_val,
"direct": direct_val,
"short": short_val,
"long": long_val,
"accepting": accepting_val,
"challenging": challenging_val,
"serious": serious_val,
"light_hearted": light_hearted_val,
"welcome_message": welcome_message,
"default_question": st.session_state.default_question,
}
}
}
# Generate response from the new API
response = query(payload)
# Parse the JSON response
text = response.get("text", "Sorry, I couldn't understand the response.")
# Display the AI response
message_placeholder.markdown(text)
# Append AI message to session state
st.session_state.messages.append({"role": "assistant", "content": text})