vsj0702 commited on
Commit
c5cb30b
Β·
verified Β·
1 Parent(s): 84bb765

fixing narration

Browse files
Files changed (1) hide show
  1. chatbot.py +20 -19
chatbot.py CHANGED
@@ -100,7 +100,7 @@ def render_chatbot(code, output, error):
100
  st.session_state.setdefault('conversation', [])
101
  st.session_state.setdefault('chat_summary', "")
102
  st.session_state.setdefault('chat_display_count', 5)
103
- st.session_state.setdefault('narrations', []) # persist narrations
104
 
105
  c1, c2 = st.columns([4, 1], gap='small')
106
  with c1:
@@ -125,9 +125,9 @@ def render_chatbot(code, output, error):
125
 
126
  total = len(st.session_state.conversation)
127
  start = max(0, total - st.session_state.chat_display_count)
128
- visible = st.session_state.conversation[start:]
129
 
130
- for i, (q, a) in enumerate(reversed(visible)):
131
  st.markdown(f'<div class="chat-message user-message">{escape(q)}</div>', unsafe_allow_html=True)
132
 
133
  def format_response(txt):
@@ -148,22 +148,23 @@ def render_chatbot(code, output, error):
148
  st.markdown(f'<div class="chat-message bot-message">{formatted}</div>', unsafe_allow_html=True)
149
 
150
  # πŸ”Š Speak
151
- if len(st.session_state.narrations) > i:
152
- narration_text, narration_file = st.session_state.narrations[i]
153
- st.audio(narration_file, format="audio/mp3")
154
- else:
155
- speak_btn = st.button(f"πŸ”Š Narrate #{i+1}", key=f"narrate_{i}")
156
- if speak_btn:
157
- status_placeholder = st.empty()
158
- status_placeholder.info("🧠 Generating narration...")
159
- bot = CodeAssistantBot()
160
- narration = bot.narrate_response(code, output, error, a, st.session_state.chat_summary)
161
- status_placeholder.info("πŸŽ™οΈ Converting to audio...")
162
- audio_filename = f"audio_{uuid.uuid4().hex}.mp3"
163
- asyncio.run(text_to_speech(narration, audio_filename))
164
- st.session_state.narrations.append((narration, audio_filename))
165
- status_placeholder.success("πŸ”Š Narration ready!")
166
- st.rerun()
 
167
 
168
  if start > 0 and st.button("πŸ”½ Show more"):
169
  st.session_state.chat_display_count += 5
 
100
  st.session_state.setdefault('conversation', [])
101
  st.session_state.setdefault('chat_summary', "")
102
  st.session_state.setdefault('chat_display_count', 5)
103
+ st.session_state.setdefault('narrations', {}) # key: index, value: (text, file)
104
 
105
  c1, c2 = st.columns([4, 1], gap='small')
106
  with c1:
 
125
 
126
  total = len(st.session_state.conversation)
127
  start = max(0, total - st.session_state.chat_display_count)
128
+ visible = list(reversed(st.session_state.conversation[start:])) # reversed
129
 
130
+ for i, (q, a) in enumerate(visible):
131
  st.markdown(f'<div class="chat-message user-message">{escape(q)}</div>', unsafe_allow_html=True)
132
 
133
  def format_response(txt):
 
148
  st.markdown(f'<div class="chat-message bot-message">{formatted}</div>', unsafe_allow_html=True)
149
 
150
  # πŸ”Š Speak
151
+ speak_btn = st.button("πŸ”Š Narrate", key=f"narrate_btn_{i}")
152
+ if speak_btn:
153
+ status_placeholder = st.empty()
154
+ status_placeholder.info("🧠 Generating narration...")
155
+ bot = CodeAssistantBot()
156
+ narration = bot.narrate_response(code, output, error, a, st.session_state.chat_summary)
157
+ status_placeholder.info("πŸŽ™οΈ Converting to audio...")
158
+ audio_filename = f"audio_{uuid.uuid4().hex}.mp3"
159
+ asyncio.run(text_to_speech(narration, audio_filename))
160
+ st.session_state.narrations[i] = (narration, audio_filename)
161
+ status_placeholder.success("πŸ”Š Narration ready!")
162
+ st.audio(audio_filename, format="audio/mp3", autoplay=True)
163
+
164
+ # Playback of previously narrated
165
+ if i in st.session_state.narrations:
166
+ narration, audio_file = st.session_state.narrations[i]
167
+ st.audio(audio_file, format="audio/mp3", autoplay=False)
168
 
169
  if start > 0 and st.button("πŸ”½ Show more"):
170
  st.session_state.chat_display_count += 5