File size: 5,819 Bytes
d2b1c5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2f35cbd
c653642
d2b1c5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32073f2
c93e131
 
 
 
32073f2
d2b1c5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import streamlit as st
from generator import generate_response_from_document
from retrieval import retrieve_documents_hybrid,find_query_dataset
from evaluation import calculate_metrics
from data_processing import load_recent_questions, save_recent_question
import time
import matplotlib.pyplot as plt

# Page Title
st.title("RAG7 - Real World RAG System")

st.markdown(
    """
    <style>
    .stTextArea textarea {
        background-color: white !important;
        font-size: 20px !important;
        color: black !important;
    }
    </style>
    """,
    unsafe_allow_html=True
)

# global retrieved_documents
# retrieved_documents = []

# global response 
# response = ""

# global time_taken_for_response
# time_taken_for_response = 'N/A'

# @st.cache_data
# def load_data():
#     load_data_from_faiss()

# data_status = load_data()

# Question Section
st.subheader("Hi, What do you want to know today?")
question = st.text_area("Enter your question:", placeholder="Type your question here...", height=100)
question = question.strip()

# # Submit Button
# if st.button("Submit"):
#     start_time = time.time()
#     retrieved_documents = retrieve_documents_hybrid(question, 10)  
#     response = generate_response_from_document(question, retrieved_documents)
#     end_time = time.time()
#     time_taken_for_response = end_time-start_time
# else:
#     response = ""

# # Response Section
# st.subheader("Response")
# st.text_area("Generated Response:", value=response, height=150, disabled=True)

# # Metrics Section
# st.subheader("Metrics")

# col1, col2 = st.columns([1, 3])  # Creating two columns for button and metrics display

# with col1:
#     if st.button("Calculate Metrics"):
#         metrics = calculate_metrics(question, response, retrieved_documents, time_taken_for_response)
#     else:
#         metrics = ""

# with col2:
#     st.text_area("Metrics:", value=metrics, height=100, disabled=True)

if "retrieved_documents" not in st.session_state:
    st.session_state.retrieved_documents = []
if "response" not in st.session_state:
    st.session_state.response = ""
if "time_taken_for_response" not in st.session_state:
    st.session_state.time_taken_for_response = "N/A"
if "metrics" not in st.session_state:
    st.session_state.metrics = {}
if "query_dataset" not in st.session_state:
    st.session_state.query_dataset = ''
if "rmse" not in st.session_state:
    st.session_state.rmse = 19999

recent_questions = load_recent_questions()

# for visualization

# response_time = [q["response_time"] for q in recent_data["questions"]]
# labels = [f"Q{i+1}" for i in range(len(response_time))]  # Labels for X-axis

# fig, ax = plt.subplots()
# ax.set_xlabel("Recent Questions")
# ax.set_ylabel("Time Taken for Response")
# ax.legend()
# st.sidebar.pyplot(fig)
if recent_questions and "questions" in recent_questions and recent_questions["questions"]:
    recent_qns = list(reversed(recent_questions["questions"]))
    st.sidebar.title("Analytics")

    # Extract response times and labels
    response_time = [q["response_time"] for q in recent_qns]
    labels = [f"Q{i+1}" for i in range(len(response_time))]

    # Plot graph
    fig, ax = plt.subplots()
    ax.plot(labels, response_time, marker="o", linestyle="-", color="skyblue")
    ax.set_xlabel("Recent Questions")
    ax.set_ylabel("Time Taken for Response (seconds)")
    ax.set_title("Response Time Analysis")

    # Display the plot in the sidebar
    st.sidebar.pyplot(fig)

    st.sidebar.markdown("---")

    # Display Recent Questions
    st.sidebar.title("Recent Questions")
    for q in recent_qns:  # Show latest first
        st.sidebar.write(f"🔹 {q['question']}")
else:
    st.sidebar.write("No recent questions")
 # Separator

# Streamlit Sidebar for Recent Questions


# Submit Button
# if st.button("Submit"):
#     start_time = time.time()
#     st.session_state.retrieved_documents = retrieve_documents_hybrid(question, 10)  
#     st.session_state.response = generate_response_from_document(question, st.session_state.retrieved_documents)
#     end_time = time.time()
#     st.session_state.time_taken_for_response = end_time - start_time

if st.button("Submit"):
    start_time = time.time()
    st.session_state.metrics = {}
    st.session_state.query_dataset =  find_query_dataset(question)
    st.session_state.retrieved_documents = retrieve_documents_hybrid(question, st.session_state.query_dataset, 10)  
    st.session_state.response = generate_response_from_document(question, st.session_state.retrieved_documents)
    end_time = time.time()
    st.session_state.time_taken_for_response = end_time - start_time
    save_recent_question(question, st.session_state.time_taken_for_response)

# Display stored response
st.subheader("Response")
st.text_area("Generated Response:", value=st.session_state.response, height=150, disabled=True)

col1, col2 = st.columns([1, 3])  # Creating two columns for button and metrics display




# Display RMSE
#st.json(st.session_state.rmse)

# # Calculate Metrics Button
# with col1:
#     if st.button("Calculate Metrics"):
#         metrics = calculate_metrics(question, st.session_state.response, st.session_state.retrieved_documents, st.session_state.time_taken_for_response)
#     else:
#         metrics = {}

# with col2:
#     #st.text_area("Metrics:", value=metrics, height=100, disabled=True)
#     st.json(metrics)


# Calculate Metrics Button
with col1:
    if st.button("Show Metrics"):     
        st.session_state.metrics = calculate_metrics(question, st.session_state.query_dataset, st.session_state.response, st.session_state.retrieved_documents, st.session_state.time_taken_for_response)
    else:
        metrics_ = {}

with col2:
    #st.text_area("Metrics:", value=metrics, height=100, disabled=True)
    st.json(st.session_state.metrics)