File size: 3,101 Bytes
29cc4c5
0759822
90cb4f4
 
 
 
bfa9b50
90cb4f4
 
 
 
0759822
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0960577
 
 
 
 
 
 
bfa9b50
 
29cc4c5
90cb4f4
0960577
90cb4f4
 
 
 
4f7c053
46dae9a
4f7c053
46dae9a
 
4f7c053
 
 
 
 
90cb4f4
46dae9a
 
0960577
29cc4c5
4f7c053
90cb4f4
 
46dae9a
90cb4f4
 
 
46dae9a
 
0759822
 
 
bfa9b50
0960577
 
4f7c053
bfa9b50
 
4f7c053
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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 = st.columns([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):
            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 TODO might be buggy
        if st.button("Next", disabled=st.session_state.current_index == len(data) - 1):
            all_ratings = flatten_ratings(response)
            if any(rating == 0 for rating in all_ratings):
                st.warning("Please provide all ratings before proceeding.")
            else:
                if current_index < len(data) - 1:
                    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:
                    if st.button("Finish"):
                        submit_feedback(current_index)

    with col3:  # Save & Resume Later button
        if st.button("Exit & Resume Later"):
            last_response = st.session_state.responses[-1]
            all_last_ratings = flatten_ratings(last_response)
            if not any(rating == 0 for rating in all_last_ratings):
                print("Submitting feedback")
                submit_feedback(current_index)
            else:
                st.warning("Please provide ratings before exiting.")
                # st.session_state.completed = True
                # st.rerun()