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( """ """, 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)