awacke1 commited on
Commit
29b8d1b
ยท
verified ยท
1 Parent(s): 4f7e42d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -33
app.py CHANGED
@@ -72,6 +72,8 @@ if 'should_rerun' not in st.session_state:
72
  st.session_state['should_rerun'] = False
73
  if 'old_val' not in st.session_state:
74
  st.session_state['old_val'] = None
 
 
75
 
76
  # ๐ŸŽจ 4. Custom CSS
77
  st.markdown("""
@@ -179,7 +181,7 @@ def create_file(prompt, response, file_type="md"):
179
  """Create file with intelligent naming"""
180
  filename = generate_filename(prompt.strip(), response.strip(), file_type)
181
  with open(filename, 'w', encoding='utf-8') as f:
182
- f.write(prompt + "\n\n" + response)
183
  return filename
184
 
185
  def get_download_link(file):
@@ -347,9 +349,10 @@ def parse_arxiv_refs(ref_text: str):
347
  'summary': summary,
348
  'year': year
349
  })
 
 
350
  return results
351
 
352
-
353
  def perform_ai_lookup(q, vocal_summary=True, extended_refs=False,
354
  titles_summary=True, full_audio=False, selected_voice="en-US-AriaNeural"):
355
  """Perform Arxiv search and generate audio summaries."""
@@ -361,12 +364,12 @@ def perform_ai_lookup(q, vocal_summary=True, extended_refs=False,
361
  r2 = client.predict(q,"mistralai/Mixtral-8x7B-Instruct-v0.1",True,api_name="/ask_llm")
362
 
363
  # ๐ŸŽฏ 2) Combine for final text output
364
- result = f"### ๐Ÿ”Ž {q}\n\n{r2}\n\n{refs}"
365
  st.markdown(result)
366
 
367
  # ๐ŸŽฏ 3) Generate "all at once" audio if requested
368
  if full_audio:
369
- complete_text = f"Complete response for query: {q}. {clean_for_speech(r2)} {clean_for_speech(refs)}"
370
  audio_file_full = speak_with_edge_tts(complete_text, selected_voice)
371
  st.write("### ๐Ÿ“š Full Audio")
372
  play_and_download_audio(audio_file_full)
@@ -389,35 +392,32 @@ def perform_ai_lookup(q, vocal_summary=True, extended_refs=False,
389
  # --------------------------------------
390
  parsed_refs = parse_arxiv_refs(refs)
391
 
392
- # Sort by year descending (put None at bottom)
393
- parsed_refs.sort(key=lambda x: x["year"] if x["year"] else 0, reverse=True)
394
-
395
  st.write("## Individual Papers (Most Recent First)")
396
  for idx, paper in enumerate(parsed_refs):
397
- year_str = paper["year"] if paper["year"] else "Unknown Year"
398
- st.markdown(f"**{idx+1}. {paper['title']}** \n*Year:* {year_str}")
399
- st.markdown(f"*Summary:* {paper['summary']}")
400
-
401
- # Two new TTS buttons: Title only or Title+Summary
402
- colA, colB = st.columns(2)
403
- with colA:
404
- if st.button(f"๐Ÿ”Š Title", key=f"title_{idx}"):
405
- text_tts = clean_for_speech(paper['title'])
406
- audio_file_title = speak_with_edge_tts(text_tts, selected_voice)
407
- play_and_download_audio(audio_file_title)
408
-
409
- with colB:
410
- if st.button(f"๐Ÿ”Š Title+Summary", key=f"summary_{idx}"):
411
- text_tts = clean_for_speech(paper['title'] + ". " + paper['summary'])
412
- audio_file_title_summary = speak_with_edge_tts(text_tts, selected_voice)
413
- play_and_download_audio(audio_file_title_summary)
414
-
415
- st.write("---")
416
 
417
  # Keep your original block for "Titles Only" if you want:
418
  if titles_summary:
419
  titles = []
420
- for line in refs.split('\n'):
421
  m = re.search(r"\[([^\]]+)\]", line)
422
  if m:
423
  titles.append(m.group(1))
@@ -432,7 +432,7 @@ def perform_ai_lookup(q, vocal_summary=True, extended_refs=False,
432
  st.write(f"**Total Elapsed:** {elapsed:.2f} s")
433
 
434
  # Always create a file with the result
435
- create_file(q, result, "md")
436
 
437
  return result
438
 
@@ -588,7 +588,7 @@ def display_file_manager_sidebar(groups, sorted_prefixes):
588
  # ๐ŸŽฏ 11. Main Application
589
  async def get_available_voices():
590
  voices = await edge_tts.list_voices()
591
- return [voice["ShortName"] for voice in voices]
592
 
593
  @st.cache_resource
594
  def fetch_voices():
@@ -661,7 +661,7 @@ def main():
661
 
662
  if tab_main == "๐Ÿ” ArXiv":
663
  st.subheader("๐Ÿ” Query ArXiv")
664
- q = st.text_input("๐Ÿ” Query:")
665
 
666
  st.markdown("### ๐ŸŽ› Options")
667
  vocal_summary = st.checkbox("๐ŸŽ™ShortAudio", value=True)
@@ -679,7 +679,7 @@ def main():
679
  save_full_transcript(q, result)
680
 
681
  st.markdown("### Change Prompt & Re-Run")
682
- q_new = st.text_input("๐Ÿ”„ Modify Query:")
683
  if q_new and st.button("๐Ÿ”„ Re-Run with Modified Query"):
684
  result = perform_ai_lookup(q_new, vocal_summary=vocal_summary, extended_refs=extended_refs,
685
  titles_summary=titles_summary, full_audio=full_audio, selected_voice=selected_voice)
@@ -711,7 +711,7 @@ def main():
711
  if imgs:
712
  c = st.slider("Cols",1,5,3)
713
  cols = st.columns(c)
714
- for i,f in enumerate(imgs):
715
  with cols[i%c]:
716
  st.image(Image.open(f),use_container_width=True)
717
  if st.button(f"๐Ÿ‘€ Analyze {os.path.basename(f)}", key=f"analyze_{f}"):
@@ -720,7 +720,7 @@ def main():
720
  else:
721
  st.write("No images found.")
722
  with tabs[1]:
723
- vids = glob.glob("*.mp4")
724
  if vids:
725
  for v in vids:
726
  with st.expander(f"๐ŸŽฅ {os.path.basename(v)}"):
 
72
  st.session_state['should_rerun'] = False
73
  if 'old_val' not in st.session_state:
74
  st.session_state['old_val'] = None
75
+ if 'audio_generated' not in st.session_state:
76
+ st.session_state['audio_generated'] = {}
77
 
78
  # ๐ŸŽจ 4. Custom CSS
79
  st.markdown("""
 
181
  """Create file with intelligent naming"""
182
  filename = generate_filename(prompt.strip(), response.strip(), file_type)
183
  with open(filename, 'w', encoding='utf-8') as f:
184
+ f.write(prompt.replace('\n', ' ') + "\n\n" + response)
185
  return filename
186
 
187
  def get_download_link(file):
 
349
  'summary': summary,
350
  'year': year
351
  })
352
+ if len(results) >= 20:
353
+ break
354
  return results
355
 
 
356
  def perform_ai_lookup(q, vocal_summary=True, extended_refs=False,
357
  titles_summary=True, full_audio=False, selected_voice="en-US-AriaNeural"):
358
  """Perform Arxiv search and generate audio summaries."""
 
364
  r2 = client.predict(q,"mistralai/Mixtral-8x7B-Instruct-v0.1",True,api_name="/ask_llm")
365
 
366
  # ๐ŸŽฏ 2) Combine for final text output
367
+ result = f"### ๐Ÿ”Ž {q.replace('\n', ' ')}\n\n{r2}\n\n{refs}"
368
  st.markdown(result)
369
 
370
  # ๐ŸŽฏ 3) Generate "all at once" audio if requested
371
  if full_audio:
372
+ complete_text = f"Complete response for query: {q.replace('\n', ' ')}. {clean_for_speech(r2)} {clean_for_speech(refs)}"
373
  audio_file_full = speak_with_edge_tts(complete_text, selected_voice)
374
  st.write("### ๐Ÿ“š Full Audio")
375
  play_and_download_audio(audio_file_full)
 
392
  # --------------------------------------
393
  parsed_refs = parse_arxiv_refs(refs)
394
 
 
 
 
395
  st.write("## Individual Papers (Most Recent First)")
396
  for idx, paper in enumerate(parsed_refs):
397
+ section_key = f"section_{idx}"
398
+ with st.expander(f"{idx+1}. {paper['title']} - {paper['year'] if paper['year'] else 'Unknown Year'}", expanded=False, key=section_key):
399
+ st.markdown(f"**Summary:** {paper['summary']}")
400
+ colA, colB = st.columns(2)
401
+ with colA:
402
+ if st.checkbox(f"Generate Audio for Title", key=f"gen_title_{idx}"):
403
+ if f"title_audio_{idx}" not in st.session_state['audio_generated']:
404
+ text_tts = clean_for_speech(paper['title'])
405
+ audio_file_title = speak_with_edge_tts(text_tts, selected_voice)
406
+ st.session_state['audio_generated'][f"title_audio_{idx}"] = audio_file_title
407
+ play_and_download_audio(st.session_state['audio_generated'].get(f"title_audio_{idx}"))
408
+ with colB:
409
+ if st.checkbox(f"Generate Audio for Title + Summary", key=f"gen_summary_{idx}"):
410
+ if f"summary_audio_{idx}" not in st.session_state['audio_generated']:
411
+ text_tts = clean_for_speech(paper['title'] + ". " + paper['summary'])
412
+ audio_file_title_summary = speak_with_edge_tts(text_tts, selected_voice)
413
+ st.session_state['audio_generated'][f"summary_audio_{idx}"] = audio_file_title_summary
414
+ play_and_download_audio(st.session_state['audio_generated'].get(f"summary_audio_{idx}"))
415
+ st.write("---")
416
 
417
  # Keep your original block for "Titles Only" if you want:
418
  if titles_summary:
419
  titles = []
420
+ for line in refs.split('\n')[:20]:
421
  m = re.search(r"\[([^\]]+)\]", line)
422
  if m:
423
  titles.append(m.group(1))
 
432
  st.write(f"**Total Elapsed:** {elapsed:.2f} s")
433
 
434
  # Always create a file with the result
435
+ create_file(q.replace('\n', ' '), result, "md")
436
 
437
  return result
438
 
 
588
  # ๐ŸŽฏ 11. Main Application
589
  async def get_available_voices():
590
  voices = await edge_tts.list_voices()
591
+ return [voice["ShortName"] for voice in voices if voice["Locale"].startswith("en")]
592
 
593
  @st.cache_resource
594
  def fetch_voices():
 
661
 
662
  if tab_main == "๐Ÿ” ArXiv":
663
  st.subheader("๐Ÿ” Query ArXiv")
664
+ q = st.text_input("๐Ÿ” Query:").replace('\n', ' ')
665
 
666
  st.markdown("### ๐ŸŽ› Options")
667
  vocal_summary = st.checkbox("๐ŸŽ™ShortAudio", value=True)
 
679
  save_full_transcript(q, result)
680
 
681
  st.markdown("### Change Prompt & Re-Run")
682
+ q_new = st.text_input("๐Ÿ”„ Modify Query:").replace('\n', ' ')
683
  if q_new and st.button("๐Ÿ”„ Re-Run with Modified Query"):
684
  result = perform_ai_lookup(q_new, vocal_summary=vocal_summary, extended_refs=extended_refs,
685
  titles_summary=titles_summary, full_audio=full_audio, selected_voice=selected_voice)
 
711
  if imgs:
712
  c = st.slider("Cols",1,5,3)
713
  cols = st.columns(c)
714
+ for i,f in enumerate(imgs[:20]):
715
  with cols[i%c]:
716
  st.image(Image.open(f),use_container_width=True)
717
  if st.button(f"๐Ÿ‘€ Analyze {os.path.basename(f)}", key=f"analyze_{f}"):
 
720
  else:
721
  st.write("No images found.")
722
  with tabs[1]:
723
+ vids = glob.glob("*.mp4")[:20]
724
  if vids:
725
  for v in vids:
726
  with st.expander(f"๐ŸŽฅ {os.path.basename(v)}"):