Spaces:
Runtime error
Runtime error
import gradio as gr | |
from transformers import GPT2LMHeadModel, GPT2Tokenizer, pipeline | |
# Initialize the GPT2 model and tokenizer | |
tokenizer = GPT2Tokenizer.from_pretrained("gpt2") | |
model = GPT2LMHeadModel.from_pretrained("gpt2") | |
# Initialize the Whisper GPT model | |
translation_pipeline = pipeline("automatic-speech-recognition", model="openai/whisper-large-v2") | |
# Geriatric Depression Scale Quiz Questions | |
questions = [ | |
"Are you basically satisfied with your life?", | |
"Have you dropped many of your activities and interests?", | |
"Do you feel that your life is empty?", | |
"Do you often get bored?", | |
"Are you in good spirits most of the time?", | |
"Are you afraid that something bad is going to happen to you?", | |
"Do you feel happy most of the time?", | |
"Do you often feel helpless?", | |
"Do you prefer to stay at home, rather than going out and doing things?", | |
"Do you feel that you have more problems with memory than most?", | |
"Do you think it is wonderful to be alive now?", | |
"Do you feel worthless the way you are now?", | |
"Do you feel full of energy?", | |
"Do you feel that your situation is hopeless?", | |
"Do you think that most people are better off than you are?" | |
] | |
def ask_questions(answers): | |
"""Calculate score based on answers.""" | |
score = 0 | |
for answer in answers: | |
if answer.lower() == 'yes': | |
score += 1 | |
elif answer.lower() != 'no': | |
raise ValueError(f"Invalid answer: {answer}") | |
return score | |
def understand_answers(audio_answers): | |
"""Convert audio answers to text using the Whisper ASR model.""" | |
asr_pipeline = pipeline("automatic-speech-recognition", model="openai/whisper-large-v2") | |
text_answers = [] | |
for audio in audio_answers: | |
transcript = asr_pipeline(audio) | |
text_answers.append(transcript[0]['generated_text']) | |
return text_answers | |
def modified_summarize(answers): | |
"""Summarize answers using the GPT2 model.""" | |
answers_str = " ".join(answers) | |
inputs = tokenizer.encode("summarize: " + answers_str, return_tensors='pt') | |
summary_ids = model.generate(inputs, max_length=150, num_beams=5, early_stopping=True) | |
return tokenizer.decode(summary_ids[0], skip_special_tokens=True) | |
def assistant(*audio_answers): | |
"""Convert audio answers to text, evaluate and provide a summary.""" | |
text_answers = understand_answers(audio_answers) | |
summarized_text = modified_summarize(text_answers) | |
score = ask_questions(text_answers) | |
return summarized_text, f"Your score is: {score}/{len(questions)}", text_answers # Return text_answers as well | |
# Create the Gradio Blocks interface with button click | |
def update(): | |
audio_answers = [audio.value for audio in inp] # Using inp as it collects all the audio inputs | |
# Handling the three returned values from the assistant function | |
summarized_text, score_string, text_answers = assistant(*audio_answers) | |
out_last_transcription.value = summarized_text # Displaying the summarized text | |
out_score.value = score_string # Displaying the score | |
with gr.Blocks() as demo: | |
gr.Markdown("Start recording your responses below and then click **Run** to see the transcription and your score.") | |
# Clearly initializing Inputs and Outputs lists for the button click | |
inp = [] | |
# Using Column to nest questions | |
with gr.Column(scale=1, min_width=600): | |
for i, question in enumerate(questions): | |
gr.Markdown(f"**Question {i+1}:** {question}") | |
audio_input = gr.Audio(source="microphone") | |
inp.append(audio_input) | |
# Two output textboxes: one for the last transcribed answer and another for the score | |
out_last_transcription = gr.Textbox(label="Last Transcribed Answer", placeholder="Last transcribed answer will appear here.") | |
out_score = gr.Textbox(label="Score", placeholder="Your score will appear here.") | |
# Button with click event | |
btn = gr.Button("Run") | |
btn.click(fn=update, inputs=inp, outputs=[out_last_transcription, out_score]) | |
demo.launch() |