Spaces:
Sleeping
Sleeping
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) | |