Spaces:
Sleeping
Sleeping
File size: 4,618 Bytes
0628cbb 226da61 0628cbb 40b71eb 0628cbb 17d5dd8 8dfb503 1ab74f5 8dfb503 4a84d58 9ac9057 1ab74f5 8dfb503 9ac9057 1ab74f5 9ac9057 8bfb7cc 9ac9057 0d46e19 1ab74f5 4a84d58 8dfb503 4a84d58 9ac9057 0d46e19 8dfb503 4a84d58 9ac9057 4a84d58 24f8abc 17d5dd8 9ac9057 17d5dd8 9ac9057 538e101 9ac9057 17d5dd8 9ac9057 17d5dd8 8bfb7cc 9ac9057 8bfb7cc 8dfb503 4a84d58 8bfb7cc 5d2245e 226da61 d2770d0 9ac9057 226da61 9ac9057 8bfb7cc 8dfb503 4a84d58 727124b 9ac9057 ca9cc5e 9ac9057 538e101 ca9cc5e 9ac9057 8ecb645 9ac9057 727124b 9ac9057 ca9cc5e b8a9661 538e101 8bfb7cc 0628cbb 17a737c b8a9661 069e614 b8a9661 4a84d58 069e614 4a84d58 069e614 4a84d58 069e614 4a84d58 b8a9661 9ac9057 4a84d58 069e614 17a737c e36ffb0 17a737c |
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 |
import streamlit as st
import time
# FIRST: Set page config before ANY other Streamlit command
st.set_page_config(page_title="Indian Spiritual RAG")
# Initialize ALL session state variables
if 'initialized' not in st.session_state:
st.session_state.initialized = False
if 'model' not in st.session_state:
st.session_state.model = None
if 'tokenizer' not in st.session_state:
st.session_state.tokenizer = None
if 'last_query' not in st.session_state:
st.session_state.last_query = ""
if 'submit_clicked' not in st.session_state:
st.session_state.submit_clicked = False
if 'query_answered' not in st.session_state:
st.session_state.query_answered = False # Tracks if query was answered
# THEN: Import your modules
from rag_engine import process_query, load_model
from utils import setup_all_auth
# Create a placeholder for initialization message
init_message = st.empty()
# β
Custom CSS for border & button fixes
st.markdown("""
<style>
/* β
Green border by default */
div[data-baseweb="input"] {
border: 2px solid #4CAF50 !important;
border-radius: 8px !important;
transition: border 0.3s ease-in-out;
}
/* π΄ Change to red while typing */
div[data-baseweb="input"]:focus-within {
border: 2px solid #FF5722 !important;
}
/* β
Ensure it turns green again AFTER submission */
.answered div[data-baseweb="input"] {
border: 2px solid #4CAF50 !important;
}
/* β
Fully green button */
.stButton>button {
background-color: #4CAF50 !important;
color: white !important;
border: none !important;
border-radius: 8px !important;
padding: 8px 16px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
}
</style>
""", unsafe_allow_html=True)
# Handle initialization
if not st.session_state.initialized:
init_message.info("Hang in there! We are setting the system up for you. π")
try:
setup_all_auth()
load_model()
st.session_state.initialized = True
st.session_state.query_answered = False # Reset query state
init_message.success("System initialized successfully!")
time.sleep(1)
init_message.empty()
except Exception as e:
init_message.error(f"Error initializing: {str(e)}")
# Function to handle form submission
def handle_form_submit():
if st.session_state.query_input:
st.session_state.last_query = st.session_state.query_input
st.session_state.submit_clicked = True
st.session_state.query_answered = True # β
Ensure it resets to green
st.session_state.query_input = "" # β
Clear input
st.experimental_rerun() # β
Refresh UI properly
# β
Wrap the text input inside a div for styling
css_class = "answered" if st.session_state.query_answered else ""
st.markdown(f'<div class="{css_class}">', unsafe_allow_html=True)
# β
Create a form for user input
with st.form(key="query_form"):
query = st.text_input("Ask your question:", key="query_input", placeholder="Type here...")
submit_button = st.form_submit_button("Get Answer", on_click=handle_form_submit)
st.markdown("</div>", unsafe_allow_html=True) # β
Close styling div
# β
Display the last question after submission
if st.session_state.last_query:
st.markdown("### Current Question:")
st.info(st.session_state.last_query)
# Sliders for customization
col1, col2 = st.columns(2)
with col1:
top_k = st.slider("Number of sources:", 3, 10, 5)
with col2:
word_limit = st.slider("Word limit:", 50, 500, 200)
# β
Process the query if submitted
if st.session_state.submit_clicked and st.session_state.last_query:
st.session_state.submit_clicked = False # Reset flag
with st.spinner("Processing your question..."):
try:
result = process_query(st.session_state.last_query, top_k=top_k, word_limit=word_limit)
st.subheader("Answer:")
st.write(result["answer_with_rag"])
st.subheader("Sources:")
for citation in result["citations"].split("\n"):
st.write(citation)
st.session_state.query_answered = True # β
Mark query as answered
st.experimental_rerun() # β
Proper rerun to refresh UI
except Exception as e:
st.error(f"Error processing query: {str(e)}")
# Add helpful information
st.markdown("---")
st.markdown("""
### About this app
This application uses a Retrieval-Augmented Generation (RAG) system to answer questions about Indian spiritual texts.
It searches through a database of texts to find relevant passages and generates answers based on those passages.
""") |