from transformers import ( AutoTokenizer, AutoModelForSeq2SeqLM, pipeline ) from textblob import TextBlob as tb import gradio as gr tokenizer = AutoTokenizer.from_pretrained("microsoft/GODEL-v1_1-base-seq2seq") model = AutoModelForSeq2SeqLM.from_pretrained("microsoft/GODEL-v1_1-base-seq2seq") pipe = pipeline(model="aware-ai/whisper-base-german") def translate(text): blob = tb(text) translation = str(blob.translate(from_lang='de',to='en')) return translation def translate_to_de(text): blob = tb(text) translation = str(blob.translate(from_lang='en',to='de')) return translation def transcribe(audio): text = pipe(audio)["text"] return text def generate(input, knowledge): if knowledge == '': pass else: knowledge = translate(knowledge) input = translate(input) top_p = 1 min_length = 8 max_length = 64 instruction = 'given a dialog context and related knowledge, you need to answer the question based on the knowledge.' if knowledge != '': knowledge = '[KNOWLEDGE] ' + knowledge dialog = ' EOS '.join([input]) query = f"{instruction} [CONTEXT] {dialog} {knowledge}" input_ids = tokenizer(f"{query}", return_tensors="pt").input_ids outputs = model.generate(input_ids, min_length=int( min_length), max_length=int(max_length), top_p=top_p, do_sample=True) output = tokenizer.decode(outputs[0], skip_special_tokens=True) output = translate_to_de(output) return output with gr.Blocks() as app: conocimiento = gr.Textbox(label='Conocimiento',lines=7,max_lines=7) voice = gr.Audio(source='microphone',type='filepath') send_button = gr.Button(value='Transcribir') transc = gr.Textbox(label='TranscripciĆ³n',value='',) button2 = gr.Button(value='Respuesta de la IA') respuesta = gr.Textbox(label='Respuesta',interactive=False,value='') send_button.click(fn=transcribe,inputs=voice,outputs=transc) button2.click(fn=generate,inputs=[transc,conocimiento],outputs=respuesta) app.launch()