Update app.py
Browse files
app.py
CHANGED
@@ -33,12 +33,12 @@ language_codes = {"English":"en", "Hindi":"hi", "Portuguese":"pt", "Chinese":"zh
|
|
33 |
"Ukrainian":"uk", "Greek":"el", "Czech":"cs", "Danish":"da", "Finnish":"fi",
|
34 |
"Bulgarian":"bg", "Croatian":"hr", "Slovak":"sk"}
|
35 |
|
36 |
-
meeting_texts = []
|
37 |
n_participants = 4 # This can be adjusted based on the number of people in the call
|
38 |
language_choices = ["English", "Polish", "Hindi", "Arabic"]
|
39 |
|
40 |
def clear_all():
|
41 |
-
global meeting_texts
|
42 |
meeting_texts = [] # Reset meeting texts
|
43 |
return [None] * (n_participants * 4 + 1) # Reset outputs of transcripts, translated texts, and dubbed videos
|
44 |
|
@@ -136,20 +136,17 @@ def create_dub_from_file(
|
|
136 |
return None
|
137 |
|
138 |
|
139 |
-
def summarize(meeting_texts
|
140 |
mt = ', '.join([f"{k}: {v}" for i in meeting_texts for k, v in i.items()])
|
141 |
meeting_date_time = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
|
142 |
meeting_texts = meeting_date_time + '\n' + mt
|
143 |
|
144 |
-
# meeting_conversation_processed ='\n'.join(mt)
|
145 |
-
# print("M:", session_conversation_processed)
|
146 |
-
|
147 |
minutes_of_meeting = ""
|
148 |
for chunk in AI71(AI71_API_KEY.strip()).chat.completions.create(
|
149 |
model="tiiuae/falcon-180b-chat",
|
150 |
messages=[
|
151 |
{"role": "system", "content": f"""You are an expereiced Secretary who can summarize meeting discussions into minutes of meeting.
|
152 |
-
Summarize the meetings discussions provided as Speakerwise conversation.
|
153 |
Strictly consider only the context given in user content {meeting_texts} for summarization.
|
154 |
Ensure to mention the title as 'Minutes of Meeting held on {meeting_date_time} and present the summary with better viewing format and title in bold letters"""},
|
155 |
{"role": "user", "content": meeting_texts},
|
@@ -198,12 +195,12 @@ def synthesize_speech(video, source_language,target_language):
|
|
198 |
return dub_video
|
199 |
|
200 |
# This function handles the processing when any participant speaks
|
201 |
-
def process_speaker(video, speaker_idx, n_participants, *language_list):
|
202 |
transcript = speech_to_text(video)
|
203 |
|
204 |
# Create outputs for each participant
|
205 |
outputs = []
|
206 |
-
global meeting_texts
|
207 |
def process_translation_dubbing(i):
|
208 |
if i != speaker_idx:
|
209 |
participant_language = language_codes[language_list[i]]
|
@@ -223,6 +220,7 @@ def process_speaker(video, speaker_idx, n_participants, *language_list):
|
|
223 |
else:
|
224 |
outputs.append(translated_text)
|
225 |
outputs.append(dubbed_video)
|
|
|
226 |
if speaker_idx == 0:
|
227 |
meeting_texts.append({f"Speaker_{speaker_idx+1}":outputs[0]})
|
228 |
else:
|
@@ -230,9 +228,11 @@ def process_speaker(video, speaker_idx, n_participants, *language_list):
|
|
230 |
|
231 |
print(len(outputs))
|
232 |
print(outputs)
|
|
|
233 |
print('meeting_texts: ',meeting_texts)
|
234 |
return outputs
|
235 |
|
|
|
236 |
def create_participant_row(i, language_choices):
|
237 |
"""Creates the UI for a single participant."""
|
238 |
with gr.Row():
|
@@ -243,12 +243,15 @@ def create_participant_row(i, language_choices):
|
|
243 |
dubbed_video = gr.Video(label="Speaker's Dubbed Video")
|
244 |
return video_input, language_dropdown, transcript_output, translated_text, dubbed_video
|
245 |
|
|
|
246 |
# Main dynamic Gradio interface
|
247 |
def create_gradio_interface(n_participants, language_choices):
|
248 |
with gr.Blocks() as demo:
|
249 |
gr.Markdown("""# LinguaPolis: Bridging Languages, Uniting Teams Globally - Multilingual Conference Call Simulation
|
250 |
## Record your video or upload your video and press the corresponding Submit button at the bottom""")
|
251 |
|
|
|
|
|
252 |
video_inputs = []
|
253 |
language_dropdowns = []
|
254 |
transcript_outputs = []
|
@@ -256,7 +259,7 @@ def create_gradio_interface(n_participants, language_choices):
|
|
256 |
dubbed_videos = []
|
257 |
|
258 |
clear_button = gr.Button("Clear All")
|
259 |
-
|
260 |
# Create a row for each participant
|
261 |
for i in range(n_participants):
|
262 |
video_input, language_dropdown, transcript_output, translated_text, dubbed_video = create_participant_row(i, language_choices)
|
@@ -270,12 +273,13 @@ def create_gradio_interface(n_participants, language_choices):
|
|
270 |
for i in range(n_participants):
|
271 |
gr.Button(f"Submit Speaker {i+1}'s Speech").click(
|
272 |
process_speaker,
|
273 |
-
[video_inputs[i], gr.State(i), gr.State(n_participants)] + [language_dropdowns[j] for j in range(n_participants)],
|
274 |
-
[
|
|
|
275 |
)
|
276 |
minutes = gr.Textbox(label="Minutes of Meeting")
|
277 |
-
gr.Button(f"Generate Minutes of meeting").click(summarize,
|
278 |
-
|
279 |
# Clear button to reset inputs and outputs
|
280 |
clear_button.click(clear_all, None, [*video_inputs, *transcript_outputs, *translated_texts, *dubbed_videos, minutes])
|
281 |
|
|
|
33 |
"Ukrainian":"uk", "Greek":"el", "Czech":"cs", "Danish":"da", "Finnish":"fi",
|
34 |
"Bulgarian":"bg", "Croatian":"hr", "Slovak":"sk"}
|
35 |
|
36 |
+
# meeting_texts = []
|
37 |
n_participants = 4 # This can be adjusted based on the number of people in the call
|
38 |
language_choices = ["English", "Polish", "Hindi", "Arabic"]
|
39 |
|
40 |
def clear_all():
|
41 |
+
# global meeting_texts
|
42 |
meeting_texts = [] # Reset meeting texts
|
43 |
return [None] * (n_participants * 4 + 1) # Reset outputs of transcripts, translated texts, and dubbed videos
|
44 |
|
|
|
136 |
return None
|
137 |
|
138 |
|
139 |
+
def summarize(meeting_texts):
|
140 |
mt = ', '.join([f"{k}: {v}" for i in meeting_texts for k, v in i.items()])
|
141 |
meeting_date_time = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
|
142 |
meeting_texts = meeting_date_time + '\n' + mt
|
143 |
|
|
|
|
|
|
|
144 |
minutes_of_meeting = ""
|
145 |
for chunk in AI71(AI71_API_KEY.strip()).chat.completions.create(
|
146 |
model="tiiuae/falcon-180b-chat",
|
147 |
messages=[
|
148 |
{"role": "system", "content": f"""You are an expereiced Secretary who can summarize meeting discussions into minutes of meeting.
|
149 |
+
Summarize the meetings discussions provided as Speakerwise conversation.
|
150 |
Strictly consider only the context given in user content {meeting_texts} for summarization.
|
151 |
Ensure to mention the title as 'Minutes of Meeting held on {meeting_date_time} and present the summary with better viewing format and title in bold letters"""},
|
152 |
{"role": "user", "content": meeting_texts},
|
|
|
195 |
return dub_video
|
196 |
|
197 |
# This function handles the processing when any participant speaks
|
198 |
+
def process_speaker(video, speaker_idx, n_participants, meeting_texts, *language_list):
|
199 |
transcript = speech_to_text(video)
|
200 |
|
201 |
# Create outputs for each participant
|
202 |
outputs = []
|
203 |
+
# global meeting_texts
|
204 |
def process_translation_dubbing(i):
|
205 |
if i != speaker_idx:
|
206 |
participant_language = language_codes[language_list[i]]
|
|
|
220 |
else:
|
221 |
outputs.append(translated_text)
|
222 |
outputs.append(dubbed_video)
|
223 |
+
|
224 |
if speaker_idx == 0:
|
225 |
meeting_texts.append({f"Speaker_{speaker_idx+1}":outputs[0]})
|
226 |
else:
|
|
|
228 |
|
229 |
print(len(outputs))
|
230 |
print(outputs)
|
231 |
+
outputs.extend(meeting_texts)
|
232 |
print('meeting_texts: ',meeting_texts)
|
233 |
return outputs
|
234 |
|
235 |
+
|
236 |
def create_participant_row(i, language_choices):
|
237 |
"""Creates the UI for a single participant."""
|
238 |
with gr.Row():
|
|
|
243 |
dubbed_video = gr.Video(label="Speaker's Dubbed Video")
|
244 |
return video_input, language_dropdown, transcript_output, translated_text, dubbed_video
|
245 |
|
246 |
+
|
247 |
# Main dynamic Gradio interface
|
248 |
def create_gradio_interface(n_participants, language_choices):
|
249 |
with gr.Blocks() as demo:
|
250 |
gr.Markdown("""# LinguaPolis: Bridging Languages, Uniting Teams Globally - Multilingual Conference Call Simulation
|
251 |
## Record your video or upload your video and press the corresponding Submit button at the bottom""")
|
252 |
|
253 |
+
meeting_texts = []
|
254 |
+
|
255 |
video_inputs = []
|
256 |
language_dropdowns = []
|
257 |
transcript_outputs = []
|
|
|
259 |
dubbed_videos = []
|
260 |
|
261 |
clear_button = gr.Button("Clear All")
|
262 |
+
|
263 |
# Create a row for each participant
|
264 |
for i in range(n_participants):
|
265 |
video_input, language_dropdown, transcript_output, translated_text, dubbed_video = create_participant_row(i, language_choices)
|
|
|
273 |
for i in range(n_participants):
|
274 |
gr.Button(f"Submit Speaker {i+1}'s Speech").click(
|
275 |
process_speaker,
|
276 |
+
# [video_inputs[i], gr.State(i), gr.State(n_participants)] + [language_dropdowns[j] for j in range(n_participants)],
|
277 |
+
[video_inputs[i], gr.State(i), gr.State(n_participants)] + [gr.State(meeting_texts)] + [language_dropdowns[j] for j in range(n_participants)],
|
278 |
+
[transcript_outputs[i]] + [k for j in zip(translated_texts[:i]+translated_texts[i+1:], dubbed_videos[:i]+dubbed_videos[i+1:]) for k in j] + [gr.State(meeting_texts)]
|
279 |
)
|
280 |
minutes = gr.Textbox(label="Minutes of Meeting")
|
281 |
+
gr.Button(f"Generate Minutes of meeting").click(summarize, meeting_texts, minutes)
|
282 |
+
|
283 |
# Clear button to reset inputs and outputs
|
284 |
clear_button.click(clear_all, None, [*video_inputs, *transcript_outputs, *translated_texts, *dubbed_videos, minutes])
|
285 |
|