DrishtiSharma commited on
Commit
170c9ab
Β·
verified Β·
1 Parent(s): bb6f1e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -5
app.py CHANGED
@@ -10,6 +10,8 @@ from langchain.memory import ConversationBufferMemory
10
  from langchain.chains import ConversationalRetrievalChain
11
  from PyPDF2 import PdfReader
12
  from groq import Groq
 
 
13
 
14
  # Clear ChromaDB cache to fix tenant issue
15
  chromadb.api.client.SharedSystemClient.clear_system_cache()
@@ -51,7 +53,7 @@ def chat_chain(vectorstore):
51
  )
52
  return chain
53
 
54
- # Function to transcribe audio using Groq's Whisper
55
  def transcribe_audio(file_path):
56
  """Transcribe audio using Groq's Whisper model."""
57
  with open(file_path, "rb") as file:
@@ -61,9 +63,13 @@ def transcribe_audio(file_path):
61
  response_format="json",
62
  language="en"
63
  )
64
- # Access the text attribute
65
  return transcription.text
66
 
 
 
 
 
 
67
  # Streamlit UI
68
  st.title("Chat with PDFs via Audio πŸŽ™οΈπŸ“š")
69
 
@@ -74,7 +80,7 @@ if uploaded_files:
74
  chain = chat_chain(vectorstore)
75
  st.success("PDFs processed! Ready to chat.")
76
 
77
- input_method = st.radio("Choose Input Method", ["Text Input", "Audio File Upload"])
78
 
79
  # Text Input Mode
80
  if input_method == "Text Input":
@@ -84,8 +90,44 @@ if uploaded_files:
84
  response = chain({"question": query})["answer"]
85
  st.write(f"**Response:** {response}")
86
 
87
- # Audio Input Mode (File Upload)
88
- elif input_method == "Audio File Upload":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  uploaded_audio = st.file_uploader("Upload an audio file (.wav, .mp3)", type=["wav", "mp3"])
90
  if uploaded_audio:
91
  audio_file_path = "uploaded_audio.wav"
 
10
  from langchain.chains import ConversationalRetrievalChain
11
  from PyPDF2 import PdfReader
12
  from groq import Groq
13
+ from streamlit_webrtc import webrtc_streamer, AudioProcessorBase, WebRtcMode
14
+ import av
15
 
16
  # Clear ChromaDB cache to fix tenant issue
17
  chromadb.api.client.SharedSystemClient.clear_system_cache()
 
53
  )
54
  return chain
55
 
56
+ # Transcribe audio using Groq Whisper
57
  def transcribe_audio(file_path):
58
  """Transcribe audio using Groq's Whisper model."""
59
  with open(file_path, "rb") as file:
 
63
  response_format="json",
64
  language="en"
65
  )
 
66
  return transcription.text
67
 
68
+ # Audio Processor Class for Recording
69
+ class AudioProcessor(AudioProcessorBase):
70
+ def recv(self, frame: av.AudioFrame) -> av.AudioFrame:
71
+ return frame
72
+
73
  # Streamlit UI
74
  st.title("Chat with PDFs via Audio πŸŽ™οΈπŸ“š")
75
 
 
80
  chain = chat_chain(vectorstore)
81
  st.success("PDFs processed! Ready to chat.")
82
 
83
+ input_method = st.radio("Choose Input Method", ["Text Input", "Record Audio", "Upload Audio File"])
84
 
85
  # Text Input Mode
86
  if input_method == "Text Input":
 
90
  response = chain({"question": query})["answer"]
91
  st.write(f"**Response:** {response}")
92
 
93
+ # Record Audio
94
+ elif input_method == "Record Audio":
95
+ st.write("Record your audio query:")
96
+ webrtc_ctx = webrtc_streamer(
97
+ key="record",
98
+ mode=WebRtcMode.SENDONLY,
99
+ audio_receiver_size=1024,
100
+ audio_processor_factory=AudioProcessor,
101
+ media_stream_constraints={"audio": True, "video": False},
102
+ )
103
+
104
+ if webrtc_ctx.audio_receiver:
105
+ st.write("Recording...")
106
+ audio_frames = []
107
+ while True:
108
+ frame = webrtc_ctx.audio_receiver.recv()
109
+ audio_frames.append(frame)
110
+ if len(audio_frames) > 5: # Stop recording after a few frames
111
+ break
112
+
113
+ # Save the recorded audio
114
+ audio_file_path = "recorded_audio.wav"
115
+ with av.open(audio_file_path, "w") as f:
116
+ for frame in audio_frames:
117
+ f.write(frame)
118
+ st.success("Recording complete!")
119
+
120
+ # Transcribe and Generate Response
121
+ st.write("Transcribing audio...")
122
+ transcription = transcribe_audio(audio_file_path)
123
+ st.write(f"**You said:** {transcription}")
124
+
125
+ with st.spinner("Generating response..."):
126
+ response = chain({"question": transcription})["answer"]
127
+ st.write(f"**Response:** {response}")
128
+
129
+ # Upload Audio File Mode
130
+ elif input_method == "Upload Audio File":
131
  uploaded_audio = st.file_uploader("Upload an audio file (.wav, .mp3)", type=["wav", "mp3"])
132
  if uploaded_audio:
133
  audio_file_path = "uploaded_audio.wav"