Update src/streamlit_app.py
Browse files- src/streamlit_app.py +38 -28
src/streamlit_app.py
CHANGED
|
@@ -108,7 +108,22 @@ h1, h2, h3 {color: #f3f4f6; font-weight: 600;}
|
|
| 108 |
""", unsafe_allow_html=True)
|
| 109 |
|
| 110 |
# ==========================================================
|
| 111 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
# ==========================================================
|
| 113 |
with st.sidebar:
|
| 114 |
st.markdown("### π§ Response Mode")
|
|
@@ -117,53 +132,48 @@ with st.sidebar:
|
|
| 117 |
("Strict (Document-only)", "Extended (Document + general)"),
|
| 118 |
index=0,
|
| 119 |
help="Strict = answers only from the document. Extended = may include general context.",
|
|
|
|
| 120 |
)
|
| 121 |
|
| 122 |
st.markdown("---")
|
| 123 |
|
| 124 |
-
#
|
| 125 |
-
|
| 126 |
-
st.session_state.show_advanced = False
|
| 127 |
-
|
| 128 |
-
show_advanced_now = st.checkbox(
|
| 129 |
"Show advanced settings (for developers)",
|
| 130 |
-
|
| 131 |
-
|
| 132 |
)
|
| 133 |
|
| 134 |
-
#
|
| 135 |
-
if show_advanced_now != st.session_state.show_advanced:
|
| 136 |
-
st.session_state.show_advanced = show_advanced_now
|
| 137 |
-
st.stop() # β
Prevents full rerun β keeps doc & state intact
|
| 138 |
-
|
| 139 |
if st.session_state.show_advanced:
|
| 140 |
st.markdown("### Developer Settings")
|
| 141 |
-
chunk_size = st.slider("Chunk Size (characters)", 200, 1500, 1000, step=50)
|
| 142 |
-
overlap = st.slider("Chunk Overlap (characters)", 50, 200, 120, step=10)
|
| 143 |
-
top_k = st.slider("Top K Results", 1, 10, 5)
|
| 144 |
else:
|
| 145 |
chunk_size, overlap, top_k = 1000, 120, 5
|
| 146 |
|
| 147 |
st.markdown("---")
|
| 148 |
st.caption("β¨ Built by Shubham Sharma")
|
| 149 |
|
|
|
|
| 150 |
# ==========================================================
|
| 151 |
-
#
|
| 152 |
# ==========================================================
|
| 153 |
-
for key, val in {
|
| 154 |
-
"user_query_input": "",
|
| 155 |
-
"show_more": False,
|
| 156 |
-
"selected_suggestion": None,
|
| 157 |
-
"query_suggestions_fixed": None,
|
| 158 |
-
"last_doc": None,
|
| 159 |
-
}.items():
|
| 160 |
-
if key not in st.session_state:
|
| 161 |
-
st.session_state[key] = val
|
| 162 |
-
|
| 163 |
def set_user_query(q, idx):
|
| 164 |
st.session_state["user_query_input"] = q
|
| 165 |
st.session_state["selected_suggestion"] = idx
|
| 166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
|
| 168 |
# ==========================================================
|
| 169 |
# π MAIN LAYOUT
|
|
|
|
| 108 |
""", unsafe_allow_html=True)
|
| 109 |
|
| 110 |
# ==========================================================
|
| 111 |
+
# π§ SESSION STATE (initialize before widgets)
|
| 112 |
+
# ==========================================================
|
| 113 |
+
for key, val in {
|
| 114 |
+
"user_query_input": "",
|
| 115 |
+
"show_more": False,
|
| 116 |
+
"selected_suggestion": None,
|
| 117 |
+
"query_suggestions_fixed": None,
|
| 118 |
+
"last_doc": None,
|
| 119 |
+
"show_advanced": False, # keep persistent checkbox state
|
| 120 |
+
}.items():
|
| 121 |
+
if key not in st.session_state:
|
| 122 |
+
st.session_state[key] = val
|
| 123 |
+
|
| 124 |
+
|
| 125 |
+
# ==========================================================
|
| 126 |
+
# π§ SIDEBAR β STABLE VERSION (no rerun reloads)
|
| 127 |
# ==========================================================
|
| 128 |
with st.sidebar:
|
| 129 |
st.markdown("### π§ Response Mode")
|
|
|
|
| 132 |
("Strict (Document-only)", "Extended (Document + general)"),
|
| 133 |
index=0,
|
| 134 |
help="Strict = answers only from the document. Extended = may include general context.",
|
| 135 |
+
key="response_mode"
|
| 136 |
)
|
| 137 |
|
| 138 |
st.markdown("---")
|
| 139 |
|
| 140 |
+
# β
Checkbox linked to session state (no rerun logic, Streamlit handles it automatically)
|
| 141 |
+
st.checkbox(
|
|
|
|
|
|
|
|
|
|
| 142 |
"Show advanced settings (for developers)",
|
| 143 |
+
key="show_advanced",
|
| 144 |
+
help="Toggle developer settings without reloading document or clearing outputs."
|
| 145 |
)
|
| 146 |
|
| 147 |
+
# β
Sliders appear conditionally, state persists
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
if st.session_state.show_advanced:
|
| 149 |
st.markdown("### Developer Settings")
|
| 150 |
+
chunk_size = st.slider("Chunk Size (characters)", 200, 1500, 1000, step=50, key="chunk_slider")
|
| 151 |
+
overlap = st.slider("Chunk Overlap (characters)", 50, 200, 120, step=10, key="overlap_slider")
|
| 152 |
+
top_k = st.slider("Top K Results", 1, 10, 5, key="topk_slider")
|
| 153 |
else:
|
| 154 |
chunk_size, overlap, top_k = 1000, 120, 5
|
| 155 |
|
| 156 |
st.markdown("---")
|
| 157 |
st.caption("β¨ Built by Shubham Sharma")
|
| 158 |
|
| 159 |
+
|
| 160 |
# ==========================================================
|
| 161 |
+
# π§© QUERY HANDLER
|
| 162 |
# ==========================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
def set_user_query(q, idx):
|
| 164 |
st.session_state["user_query_input"] = q
|
| 165 |
st.session_state["selected_suggestion"] = idx
|
| 166 |
+
# β οΈ No explicit rerun β Streamlit does this automatically
|
| 167 |
+
|
| 168 |
+
|
| 169 |
+
# ==========================================================
|
| 170 |
+
# π§ USER INPUT
|
| 171 |
+
# ==========================================================
|
| 172 |
+
user_query = st.text_input(
|
| 173 |
+
"Type your question or click one above:",
|
| 174 |
+
key="user_query_input"
|
| 175 |
+
)
|
| 176 |
+
|
| 177 |
|
| 178 |
# ==========================================================
|
| 179 |
# π MAIN LAYOUT
|