23RAG7 / app.py
cb1716pics's picture
Upload 4 files
599d161 verified
raw
history blame
4.92 kB
import streamlit as st
from generator import generate_response_from_document
from retrieval import retrieve_documents_hybrid
from evaluation import calculate_metrics
from data_processing import load_recent_questions, save_recent_question
import time
# Page Title
st.title("RAG7 - Real World RAG System")
# 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)
# # 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 = {}
recent_data = load_recent_questions()
import matplotlib.pyplot as plt
# for visualization
st.sidebar.title("Analytics")
# 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)
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.plot(labels, response_time, color="skyblue")
ax.set_xlabel("Recent Questions")
ax.set_ylabel("Time Taken for Response (seconds)")
ax.set_title("Response Time Analysis")
st.sidebar.markdown("---") # Separator
# Streamlit Sidebar for Recent Questions
st.sidebar.title("Recent Questions")
for q in reversed(recent_data["questions"]): # Show latest first
st.sidebar.write(f"🔹 {q}")
# 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.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
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
# # 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.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 )