Spaces:
Runtime error
Runtime error
import gradio as gr | |
import json | |
import os | |
from datetime import datetime | |
from transformers import pipeline | |
# Initialize speech recognition pipeline | |
transcriber = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-base-960h") | |
# Predefined interview questions (can be customized) | |
default_questions = [ | |
"Tell me about yourself and your background.", | |
"Why are you interested in this position?", | |
"What are your key strengths and weaknesses?", | |
"Describe a challenging situation at work and how you handled it.", | |
"Where do you see yourself in five years?", | |
"Why should we hire you for this position?", | |
"Do you have any questions for us?" | |
] | |
def save_responses(candidate_name, responses): | |
"""Save candidate responses to a JSON file""" | |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
filename = f"{candidate_name.replace(' ', '_')}_{timestamp}.json" | |
with open(filename, "w") as f: | |
json.dump(responses, f, indent=4) | |
return filename | |
class InterviewSession: | |
def __init__(self): | |
self.candidate_name = "" | |
self.position = "" | |
self.responses = {} | |
self.current_question_idx = 0 | |
self.questions = default_questions.copy() | |
def start_interview(self, candidate_name, position, custom_questions=None): | |
"""Initialize a new interview session""" | |
self.candidate_name = candidate_name | |
self.position = position | |
self.responses = { | |
"candidate_name": candidate_name, | |
"position": position, | |
"interview_date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), | |
"answers": {} | |
} | |
self.current_question_idx = 0 | |
if custom_questions and custom_questions.strip(): | |
self.questions = custom_questions.strip().split('\n') | |
else: | |
self.questions = default_questions.copy() | |
return self.get_current_question() | |
def get_current_question(self): | |
"""Get the current question text""" | |
if 0 <= self.current_question_idx < len(self.questions): | |
return self.questions[self.current_question_idx] | |
return "Interview complete! Click 'Save Interview' to finish." | |
def process_answer(self, audio_path): | |
"""Process and save the candidate's answer""" | |
if self.current_question_idx >= len(self.questions): | |
return "Interview already completed", None | |
# Transcribe audio | |
result = transcriber(audio_path) | |
transcription = result["text"] | |
# Save response | |
question = self.questions[self.current_question_idx] | |
self.responses["answers"][question] = transcription | |
# Move to next question | |
self.current_question_idx += 1 | |
return transcription, self.get_current_question() | |
def finish_interview(self): | |
"""Finish the interview and save results""" | |
if not self.candidate_name: | |
return "No interview in progress", None | |
filename = save_responses(self.candidate_name, self.responses) | |
result = f"Interview saved to {filename}" | |
# Reset for next interview | |
self.candidate_name = "" | |
self.position = "" | |
self.responses = {} | |
self.current_question_idx = 0 | |
return result, filename | |
# Initialize the interview session | |
session = InterviewSession() | |
# Create the Gradio interface | |
with gr.Blocks(title="AI Interviewer") as app: | |
gr.Markdown("# AI Interviewer") | |
gr.Markdown("This application conducts interviews, transcribes responses, and saves them for HR review.") | |
with gr.Tab("Setup Interview"): | |
candidate_name = gr.Textbox(label="Candidate Name") | |
position = gr.Textbox(label="Position Applied For") | |
custom_questions = gr.Textbox( | |
label="Custom Questions (one per line, leave empty for default questions)", | |
placeholder="Enter custom questions here, one per line...", | |
lines=5 | |
) | |
start_btn = gr.Button("Start Interview") | |
setup_output = gr.Textbox(label="Status") | |
start_btn.click( | |
session.start_interview, | |
inputs=[candidate_name, position, custom_questions], | |
outputs=setup_output | |
) | |
with gr.Tab("Conduct Interview"): | |
current_question = gr.Textbox(label="Current Question") | |
audio_input = gr.Audio(source="microphone", type="filepath", label="Record Your Answer") | |
transcription = gr.Textbox(label="Transcribed Answer") | |
next_question = gr.Textbox(label="Next Question") | |
audio_input.change( | |
session.process_answer, | |
inputs=audio_input, | |
outputs=[transcription, next_question] | |
) | |
with gr.Tab("Finish Interview"): | |
finish_btn = gr.Button("Save Interview") | |
finish_output = gr.Textbox(label="Result") | |
download_link = gr.File(label="Download Interview Responses") | |
finish_btn.click( | |
session.finish_interview, | |
inputs=[], | |
outputs=[finish_output, download_link] | |
) | |
# Launch the app | |
app.launch() |