Spaces:
Running
Running
from db.schema import Feedback, Response | |
from db.crud import save_feedback, read | |
import streamlit as st | |
from datetime import datetime | |
import os | |
from dotenv import load_dotenv | |
load_dotenv() | |
VALIDATION_CODE = os.getenv("VALIDATION_CODE") | |
def submit_feedback(current_index): | |
"""Handles feedback submission to the database.""" | |
feedback = Feedback( | |
id=current_index + 1, | |
user_id=st.session_state.username, | |
time_stamp=datetime.now().isoformat(), | |
responses=st.session_state.responses, | |
) | |
try: | |
save_feedback(feedback) | |
st.session_state.completed = True | |
st.rerun() | |
except Exception as e: | |
st.error(f"An error occurred while submitting feedback: {e}") | |
def flatten_ratings(response): | |
all_ratings = [] | |
for model_ratings in response.model_ratings.values(): | |
all_ratings.extend(model_ratings.query_v_ratings.values()) | |
all_ratings.extend(model_ratings.query_p0_ratings.values()) | |
all_ratings.extend(model_ratings.query_p1_ratings.values()) | |
return all_ratings | |
def navigation_buttons(data, response: Response): | |
"""Display navigation buttons.""" | |
current_index = st.session_state.current_index | |
col1, col2, col3, col4 = st.columns([1, 1, 1, 2]) | |
with col1: # Back button #TODO fix: only gets ratings for the session, not from previous session | |
if st.button("Back", disabled=st.session_state.current_index == 0, help="Go back to the previous question"): | |
if current_index > 0: | |
st.session_state.previous_ratings[ | |
data.iloc[st.session_state.current_index]['config_id']] = response.model_ratings | |
st.session_state.current_index -= 1 | |
st.rerun() | |
else: | |
st.warning("You are at the beginning of the survey, can't go back.") | |
# st.rerun() | |
with col2: # Next button | |
if st.button("Next", disabled=current_index == len(data) - 1, help="Proceed to the next question, your current progress will be saved. Click twice if page does not change."): | |
all_ratings = flatten_ratings(response) | |
if any(rating == 0 for rating in all_ratings): | |
st.warning("Please provide all ratings before proceeding.") | |
elif current_index < len(data) - 1: | |
# Store the ratings with proper structure | |
config_id = data.iloc[current_index]['config_id'] | |
if isinstance(response.model_ratings, dict): | |
st.session_state.previous_ratings[config_id] = { | |
model: { | |
'query_v_ratings': ratings.query_v_ratings, | |
'query_p0_ratings': ratings.query_p0_ratings, | |
'query_p1_ratings': ratings.query_p1_ratings | |
} | |
for model, ratings in response.model_ratings.items() | |
} | |
else: | |
st.session_state.previous_ratings[config_id] = { | |
model: { | |
'query_v_ratings': getattr(ratings, 'query_v_ratings', {}), | |
'query_p0_ratings': getattr(ratings, 'query_p0_ratings', {}), | |
'query_p1_ratings': getattr(ratings, 'query_p1_ratings', {}) | |
} | |
for model, ratings in response.model_ratings.items() | |
} | |
st.session_state.current_index += 1 | |
# st.rerun() | |
with col3: # Submit button | |
if st.button("Submit & Resume Later", help="Submit your evaluations. You can return later to make changes if needed."): | |
all_ratings = flatten_ratings(response) | |
if any(rating == 0 for rating in all_ratings): | |
st.warning("Please provide all ratings before submitting.") | |
else: | |
submit_feedback(current_index) | |
with col4: # Save & Resume Later button | |
if st.button("Exit & Resume Later", help="Save your progress and exit the page, come back anytime to continue where you left off."): | |
submit_feedback(current_index) |