import gradio as gr from openai import OpenAI import threading as th import os import json from transcription_service import transcribe_speech_local,translation_service def translateoutput(text,language): if text=="" or text is None: return "" language=language_info[language] return translation_service(text,language) # Initialize a global variable to hold previous output language_info=json.load(open("languages_info.json","r"))['wispher_language'] def transcription(audio_file,input_lang): global language_info return transcribe_speech_local(audio_file,language_info[input_lang]) def func(audio_file,input_lang,lan,state="",state1=""): text_transcription=transcription(audio_file,input_lang) text_translation=translateoutput(text_transcription,lan) if text_transcription is None: text_transcription="" state+=str(text_transcription)+" " state1+=str(text_translation)+" " state=state.replace(".","\n") state1=state1.replace(".","\n") return state,state1 def gpt_api(text,language): if text=="" or text is None: return "" client = OpenAI() response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": f"You will be provided with a text data, and your task is to make very concise summery it into {language}."}, {"role": "user", "content": text}, ]) message=response.choices[0].message.content th.current_thread().return_value=message def make_summery(text,text1,input_lan,output_lan): t1=th.Thread(target=gpt_api, args=(text,input_lan,)) t2=th.Thread(target=gpt_api, args=(text1,output_lan,)) t1.start() t2.start() t1.join() t2.join() return t1.return_value,t2.return_value def clear_output_data(): return "","","","" def switch(input_lan,lan): return lan,input_lan with gr.Blocks(theme=gr.themes.Soft(),css="css.txt") as app: gr.Markdown("## Mufin Real-Time Audio Transcription And Translation",elem_id="heading") gr.Markdown("### say any language we are here to translate it for team!!",elem_classes="heading") with gr.Row(): mic = gr.Audio(sources="microphone",streaming=True,type='filepath',label='Speak') input_lan=gr.Dropdown(choices=language_info.keys(),label="Choose Input Language please",value="English",interactive=True) switchbutton=gr.Button(value='\u21C6',variant="secondary",elem_id="switchbtn") lan=gr.Dropdown(choices=language_info.keys(),label="Choose a language for translation",value="Korean",interactive=True) summery=gr.Button(value="Summery",variant="secondary",size="small",elem_id="summery") clear_output = gr.ClearButton(value="Clear Output",variant="stop",size="small",elem_id="clear") with gr.Row(): with gr.Column(): text=gr.Textbox(interactive=False,label="Transcription",lines=10,max_lines=10) with gr.Column(): text1 = gr.Textbox(interactive=False,label="Translation",lines=10,max_lines=10,) st=mic.stream(func, [mic,input_lan,lan,text,text1], [text,text1],show_progress=False,) with gr.Row(): sumer_ts=gr.Textbox(label="Summery of Transcription",interactive=False,lines=4,max_lines=4) sumer_tr=gr.Textbox(label="Summery of Translation",interactive=False,lines=4,max_lines=4) # pass summery.click(make_summery,[text,text1,input_lan,lan],[sumer_ts,sumer_tr],cancels=[st],queue=False) clear_output.click(clear_output_data,[],[text,text1,sumer_tr,sumer_ts],cancels=[st],queue=False) switchbutton.click(switch,[input_lan,lan],[input_lan,lan],cancels=[st],queue=False) # gr.update(visible=True) app.queue() app.launch()