awacke1 commited on
Commit
c9af8d7
Β·
verified Β·
1 Parent(s): b41266a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +97 -10
app.py CHANGED
@@ -270,6 +270,74 @@ async def load_chat():
270
  numbered_content = "\n".join(f"{i+1}. {line}" for i, line in enumerate(lines) if line.strip())
271
  return numbered_content
272
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  async def perform_ai_lookup(q, vocal_summary=True, extended_refs=False, titles_summary=True, full_audio=False, useArxiv=True, useArxivAudio=False):
274
  start = time.time()
275
  client = anthropic.Anthropic(api_key=anthropic_key)
@@ -553,7 +621,6 @@ def main():
553
  tab_main = st.radio("Action:", ["🎀 Chat & Voice", "πŸ“Έ Media", "πŸ” ArXiv", "πŸ“š PDF to Audio"], horizontal=True, key="tab_main")
554
  useArxiv = st.checkbox("Search ArXiv", True, key="use_arxiv")
555
  useArxivAudio = st.checkbox("ArXiv Audio", False, key="use_arxiv_audio")
556
- # Use st.checkbox without reassigning to st.session_state
557
  st.checkbox("Autosend Chat", value=True, key="autosend")
558
  st.checkbox("Autosearch ArXiv", value=True, key="autosearch")
559
 
@@ -592,17 +659,37 @@ def main():
592
  filename = asyncio.run(save_pasted_image(paste_result.image_data, st.session_state.username))
593
  if filename:
594
  st.session_state.pasted_image_data = filename
 
595
  if (message and message != st.session_state.last_message) or st.session_state.pasted_image_data:
596
  st.session_state.last_message = message
597
- if st.session_state.autosend or st.button("Send πŸš€", key="send_button"): # Use st.session_state.autosend directly
598
- if message.strip():
599
- asyncio.run(save_chat_entry(st.session_state.username, message, True))
600
- if st.session_state.pasted_image_data:
601
- asyncio.run(save_chat_entry(st.session_state.username, f"Pasted image: {st.session_state.pasted_image_data}"))
602
- st.session_state.pasted_image_data = None
603
- st.session_state.timer_start = time.time()
604
- save_username(st.session_state.username)
605
- st.rerun()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
606
 
607
  # πŸ“Έ Media
608
  elif tab_main == "πŸ“Έ Media":
 
270
  numbered_content = "\n".join(f"{i+1}. {line}" for i, line in enumerate(lines) if line.strip())
271
  return numbered_content
272
 
273
+ # Claude Search Function
274
+ async def perform_claude_search(query, username):
275
+ client = anthropic.Anthropic(api_key=anthropic_key)
276
+ response = client.messages.create(
277
+ model="claude-3-sonnet-20240229",
278
+ max_tokens=1000,
279
+ messages=[{"role": "user", "content": query}]
280
+ )
281
+ result = response.content[0].text
282
+ st.markdown(f"### Claude's Reply 🧠\n{result}")
283
+
284
+ # Save to chat history with audio
285
+ audio_file, _ = await async_edge_tts_generate(result, st.session_state['tts_voice'], username)
286
+ if audio_file:
287
+ central = pytz.timezone('US/Central')
288
+ timestamp = datetime.now(central).strftime("%Y-%m-%d %H:%M:%S")
289
+ entry = f"[{timestamp}] {username}:\n```markdown\nClaude Search: {query}\nResponse: {result}\n```"
290
+ with open(CHAT_FILE, 'a') as f:
291
+ f.write(f"{entry}\n")
292
+ with open(HISTORY_FILE, 'a') as f:
293
+ f.write(f"[{timestamp}] {username}: Audio - {audio_file}\n")
294
+ st.session_state['mp3_files'][os.path.basename(audio_file)] = audio_file
295
+ st.session_state.chat_history.append(entry)
296
+ play_and_download_audio(audio_file)
297
+ return result
298
+
299
+ # ArXiv Search Function
300
+ async def perform_arxiv_search(query, username):
301
+ # Step 1: Claude Search
302
+ client = anthropic.Anthropic(api_key=anthropic_key)
303
+ claude_response = client.messages.create(
304
+ model="claude-3-sonnet-20240229",
305
+ max_tokens=1000,
306
+ messages=[{"role": "user", "content": query}]
307
+ )
308
+ claude_result = claude_response.content[0].text
309
+ st.markdown(f"### Claude's Reply 🧠\n{claude_result}")
310
+
311
+ # Step 2: Feed Claude result into ArXiv
312
+ enhanced_query = f"{query}\n\n{claude_result}"
313
+ gradio_client = Client("awacke1/Arxiv-Paper-Search-And-QA-RAG-Pattern")
314
+ refs = gradio_client.predict(
315
+ enhanced_query, 10, "Semantic Search", "mistralai/Mixtral-8x7B-Instruct-v0.1", api_name="/update_with_rag_md"
316
+ )[0]
317
+ result = f"πŸ”Ž {enhanced_query}\n\n{refs}"
318
+ st.markdown(f"### ArXiv Results πŸ”\n{result}")
319
+
320
+ # Parse papers and generate long audio
321
+ papers = parse_arxiv_refs(refs)
322
+ if papers:
323
+ long_audio_text = f"Claude Search: {query}\nResponse: {claude_result}\n\nArXiv Results:\n"
324
+ for i, paper in enumerate(papers, 1):
325
+ long_audio_text += f"Paper {i}: {paper['title']} by {paper['authors']}. Summary: {paper['summary']}\n"
326
+ audio_file, _ = await async_edge_tts_generate(long_audio_text, st.session_state['tts_voice'], username)
327
+ if audio_file:
328
+ central = pytz.timezone('US/Central')
329
+ timestamp = datetime.now(central).strftime("%Y-%m-%d %H:%M:%S")
330
+ entry = f"[{timestamp}] {username}:\n```markdown\nArXiv Search: {query}\nClaude Response: {claude_result}\nArXiv Results: {refs}\n```"
331
+ with open(CHAT_FILE, 'a') as f:
332
+ f.write(f"{entry}\n")
333
+ with open(HISTORY_FILE, 'a') as f:
334
+ f.write(f"[{timestamp}] {username}: Audio - {audio_file}\n")
335
+ st.session_state['mp3_files'][os.path.basename(audio_file)] = audio_file
336
+ st.session_state.chat_history.append(entry)
337
+ st.subheader("πŸ“ Full ArXiv Audio")
338
+ play_and_download_audio(audio_file)
339
+ return result, papers
340
+
341
  async def perform_ai_lookup(q, vocal_summary=True, extended_refs=False, titles_summary=True, full_audio=False, useArxiv=True, useArxivAudio=False):
342
  start = time.time()
343
  client = anthropic.Anthropic(api_key=anthropic_key)
 
621
  tab_main = st.radio("Action:", ["🎀 Chat & Voice", "πŸ“Έ Media", "πŸ” ArXiv", "πŸ“š PDF to Audio"], horizontal=True, key="tab_main")
622
  useArxiv = st.checkbox("Search ArXiv", True, key="use_arxiv")
623
  useArxivAudio = st.checkbox("ArXiv Audio", False, key="use_arxiv_audio")
 
624
  st.checkbox("Autosend Chat", value=True, key="autosend")
625
  st.checkbox("Autosearch ArXiv", value=True, key="autosearch")
626
 
 
659
  filename = asyncio.run(save_pasted_image(paste_result.image_data, st.session_state.username))
660
  if filename:
661
  st.session_state.pasted_image_data = filename
662
+
663
  if (message and message != st.session_state.last_message) or st.session_state.pasted_image_data:
664
  st.session_state.last_message = message
665
+ col_send, col_claude, col_arxiv = st.columns([1, 1, 1])
666
+
667
+ with col_send:
668
+ if st.session_state.autosend or st.button("Send πŸš€", key="send_button"): # Existing Send button
669
+ if message.strip():
670
+ asyncio.run(save_chat_entry(st.session_state.username, message, True))
671
+ if st.session_state.pasted_image_data:
672
+ asyncio.run(save_chat_entry(st.session_state.username, f"Pasted image: {st.session_state.pasted_image_data}"))
673
+ st.session_state.pasted_image_data = None
674
+ st.session_state.timer_start = time.time()
675
+ save_username(st.session_state.username)
676
+ st.rerun()
677
+
678
+ with col_claude:
679
+ if st.button("🧠 Claude", key="claude_button"): # New Claude button
680
+ if message.strip():
681
+ await perform_claude_search(message, st.session_state.username)
682
+ st.session_state.timer_start = time.time()
683
+ save_username(st.session_state.username)
684
+ st.rerun()
685
+
686
+ with col_arxiv:
687
+ if st.button("πŸ” ArXiv", key="arxiv_button"): # New ArXiv button
688
+ if message.strip():
689
+ await perform_arxiv_search(message, st.session_state.username)
690
+ st.session_state.timer_start = time.time()
691
+ save_username(st.session_state.username)
692
+ st.rerun()
693
 
694
  # πŸ“Έ Media
695
  elif tab_main == "πŸ“Έ Media":