zakerytclarke commited on
Commit
f9e63d0
·
verified ·
1 Parent(s): 31ba1a3

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +17 -32
src/streamlit_app.py CHANGED
@@ -102,8 +102,6 @@ SAMPLE_ASSISTANT_MSG = {
102
  # =========================
103
  if "messages" not in st.session_state:
104
  st.session_state.messages = []
105
- if "needs_answer" not in st.session_state:
106
- st.session_state.needs_answer = False
107
  if "seeded" not in st.session_state:
108
  st.session_state.seeded = False
109
 
@@ -114,7 +112,7 @@ if (not st.session_state.seeded) and (len(st.session_state.messages) == 0):
114
 
115
 
116
  # =========================
117
- # HEADER (prevent logo flash)
118
  # =========================
119
  col1, col2 = st.columns([1, 7], vertical_alignment="center")
120
  with col1:
@@ -146,10 +144,9 @@ with st.sidebar:
146
  )
147
 
148
  if st.button("Clear chat"):
149
- st.session_state.messages = []
150
- st.session_state.needs_answer = False
151
- st.session_state.seeded = True
152
- st.rerun()
153
 
154
 
155
  # =========================
@@ -312,7 +309,6 @@ for i, msg in enumerate(st.session_state.messages):
312
  )
313
 
314
  with metrics_col:
315
-
316
  with st.popover("ℹ️", help="Inspect"):
317
  st.markdown("**Context**")
318
  st.code(msg.get("context", ""), language="text")
@@ -323,25 +319,16 @@ for i, msg in enumerate(st.session_state.messages):
323
 
324
 
325
  # =========================
326
- # INPUT
327
  # =========================
328
  query = st.chat_input("Ask a question...")
329
 
330
  if query:
 
331
  st.session_state.messages.append({"role": "user", "content": query})
332
- st.session_state.needs_answer = True
333
- st.rerun()
334
 
335
-
336
- # =========================
337
- # GENERATE (once per user message)
338
- # =========================
339
- if (
340
- st.session_state.needs_answer
341
- and st.session_state.messages
342
- and st.session_state.messages[-1]["role"] == "user"
343
- ):
344
- question = st.session_state.messages[-1]["content"]
345
 
346
  # Web search
347
  web_ctx, search_time = web_search_snippets(question)
@@ -351,7 +338,7 @@ if (
351
  prompt = f"{context}\n{system_prompt}\n{question}\n"
352
  input_tokens = count_tokens(prompt)
353
 
354
- # Run traced answer
355
  with st.chat_message("assistant"):
356
  # Row 1: message + feedback (feedback disabled until persisted)
357
  msg_col, fb_col = st.columns([14, 1], vertical_alignment="center")
@@ -364,12 +351,14 @@ if (
364
  answer = traced_answer(context, system_prompt, question)
365
  trace_id = get_trace_id_if_available()
366
 
367
- # Stream into the message column
368
  buf = ""
369
- for ch in answer:
370
  buf += ch
371
- placeholder.markdown(buf)
372
- time.sleep(0.002)
 
 
373
 
374
  gen_time = time.perf_counter() - start
375
  output_tokens = count_tokens(answer)
@@ -394,9 +383,8 @@ if (
394
  st.code(question, language="text")
395
  st.markdown("**Prompt**")
396
  st.code(prompt, language="text")
397
-
398
 
399
- # Persist assistant message
400
  st.session_state.messages.append(
401
  {
402
  "role": "assistant",
@@ -413,7 +401,4 @@ if (
413
  "trace_id": trace_id,
414
  "feedback": None,
415
  }
416
- )
417
-
418
- st.session_state.needs_answer = False
419
- st.rerun()
 
102
  # =========================
103
  if "messages" not in st.session_state:
104
  st.session_state.messages = []
 
 
105
  if "seeded" not in st.session_state:
106
  st.session_state.seeded = False
107
 
 
112
 
113
 
114
  # =========================
115
+ # HEADER
116
  # =========================
117
  col1, col2 = st.columns([1, 7], vertical_alignment="center")
118
  with col1:
 
144
  )
145
 
146
  if st.button("Clear chat"):
147
+ st.session_state.messages = []
148
+ st.session_state.seeded = True
149
+ st.rerun()
 
150
 
151
 
152
  # =========================
 
309
  )
310
 
311
  with metrics_col:
 
312
  with st.popover("ℹ️", help="Inspect"):
313
  st.markdown("**Context**")
314
  st.code(msg.get("context", ""), language="text")
 
319
 
320
 
321
  # =========================
322
+ # INPUT + GENERATE (NO RERUN / NO FLASH)
323
  # =========================
324
  query = st.chat_input("Ask a question...")
325
 
326
  if query:
327
+ # Persist user message
328
  st.session_state.messages.append({"role": "user", "content": query})
 
 
329
 
330
+ # Generate immediately in the same run (no st.rerun)
331
+ question = query
 
 
 
 
 
 
 
 
332
 
333
  # Web search
334
  web_ctx, search_time = web_search_snippets(question)
 
338
  prompt = f"{context}\n{system_prompt}\n{question}\n"
339
  input_tokens = count_tokens(prompt)
340
 
341
+ # Assistant response
342
  with st.chat_message("assistant"):
343
  # Row 1: message + feedback (feedback disabled until persisted)
344
  msg_col, fb_col = st.columns([14, 1], vertical_alignment="center")
 
351
  answer = traced_answer(context, system_prompt, question)
352
  trace_id = get_trace_id_if_available()
353
 
354
+ # Typewriter render (reduce updates to avoid jitter)
355
  buf = ""
356
+ for j, ch in enumerate(answer, 1):
357
  buf += ch
358
+ if j % 6 == 0: # update every 6 chars
359
+ placeholder.markdown(buf)
360
+ time.sleep(0.001)
361
+ placeholder.markdown(buf)
362
 
363
  gen_time = time.perf_counter() - start
364
  output_tokens = count_tokens(answer)
 
383
  st.code(question, language="text")
384
  st.markdown("**Prompt**")
385
  st.code(prompt, language="text")
 
386
 
387
+ # Persist assistant message (so it shows on subsequent runs)
388
  st.session_state.messages.append(
389
  {
390
  "role": "assistant",
 
401
  "trace_id": trace_id,
402
  "feedback": None,
403
  }
404
+ )