Shubham170793 commited on
Commit
34f4cf4
Β·
verified Β·
1 Parent(s): 6bf254d

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. 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
- # 🧭 SIDEBAR β€” STABLE, NO RERUN
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- # 🧠 Advanced settings β€” persistent, no rerun
125
- if "show_advanced" not in st.session_state:
126
- st.session_state.show_advanced = False
127
-
128
- show_advanced_now = st.checkbox(
129
  "Show advanced settings (for developers)",
130
- value=st.session_state.show_advanced,
131
- key="show_adv_checkbox"
132
  )
133
 
134
- # Detect toggle change without triggering full rerun
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
- # 🧠 SESSION STATE INITIALIZATION
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
- st.experimental_rerun()
 
 
 
 
 
 
 
 
 
 
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