Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import random | |
| from datasets import load_dataset | |
| questions_data = None | |
| def load_questions(): | |
| global questions_data | |
| if questions_data is None: | |
| try: | |
| ds = load_dataset('Aiman1234/Interview-questions') | |
| questions_data = ds['train'] | |
| return True | |
| except Exception as e: | |
| print(f"Error loading dataset: {e}") | |
| return False | |
| return True | |
| class InterviewBot: | |
| def __init__(self): | |
| self.current_question = None | |
| self.score = 0 | |
| self.total_questions = 0 | |
| self.answers_given = [] | |
| def get_next_question(self, difficulty='Easy'): | |
| if not load_questions(): | |
| return "Failed to load questions. Please try again.", "N/A", "N/A" | |
| try: | |
| filtered = list(questions_data) | |
| random_q = random.choice(filtered) | |
| self.current_question = random_q | |
| self.total_questions += 1 | |
| lang = random_q.get('language', 'Unknown') | |
| level = random_q.get('level', 'Not specified') | |
| question = random_q.get('Questions', 'No question') | |
| return ( | |
| f"{question}", | |
| str(lang), | |
| str(level) | |
| ) | |
| except Exception as e: | |
| return f"Error getting question: {str(e)}", "Error", "Error" | |
| def evaluate_answer(self, user_answer): | |
| if not self.current_question: | |
| return "Please get a question first!" | |
| try: | |
| answer_length = len(user_answer.split()) | |
| correct_answer = self.current_question.get('Answers', '') | |
| correct_answer_length = len(correct_answer.split()) | |
| similarity = min(answer_length, correct_answer_length) / max(answer_length, correct_answer_length) if max(answer_length, correct_answer_length) > 0 else 0 | |
| if similarity > 0.5: | |
| feedback = f"Good effort! Your answer covers key points.\nExpected answer length: ~{correct_answer_length} words\nYour answer: {answer_length} words" | |
| self.score += 1 | |
| else: | |
| feedback = f"Consider expanding your answer.\nExpected length: ~{correct_answer_length} words\nYour answer: {answer_length} words" | |
| self.answers_given.append({ | |
| 'question': self.current_question.get('Questions', ''), | |
| 'your_answer': user_answer, | |
| 'similarity': similarity | |
| }) | |
| return feedback | |
| except Exception as e: | |
| return f"Error evaluating answer: {str(e)}" | |
| def get_performance_analysis(self): | |
| if self.total_questions == 0: | |
| return "No questions answered yet!" | |
| try: | |
| accuracy = (self.score / self.total_questions) * 100 | |
| analysis = f""" | |
| PERFORMANCE ANALYSIS | |
| {'='*50} | |
| Total Questions Attempted: {self.total_questions} | |
| Correct Answers: {self.score} | |
| Accuracy Rate: {accuracy:.1f}% | |
| STRENGTHS: | |
| - Successfully completed {self.total_questions} interview questions | |
| - Current accuracy rate: {accuracy:.1f}% | |
| AREAS FOR IMPROVEMENT: | |
| - Focus on providing detailed answers | |
| - Practice technical concepts | |
| - Improve clarity in explanations | |
| RECOMMENDATIONS: | |
| 1. Review expected answers for questions | |
| 2. Practice similar questions | |
| 3. Work on comprehensive responses | |
| 4. Explain concepts clearly | |
| """ | |
| return analysis | |
| except Exception as e: | |
| return f"Error generating analysis: {str(e)}" | |
| bot = InterviewBot() | |
| def start_interview(difficulty): | |
| try: | |
| question, language, level = bot.get_next_question(difficulty) | |
| return f"{question}\n\n(Language: {language} | Level: {level})" | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| def submit_answer(answer_text): | |
| if not answer_text.strip(): | |
| return "Please provide an answer!" | |
| return bot.evaluate_answer(answer_text) | |
| def show_analysis(): | |
| return bot.get_performance_analysis() | |
| with gr.Blocks(title="AI Interview Bot CS") as demo: | |
| gr.Markdown("# AI Job Interview Bot - Computer Science") | |
| gr.Markdown("Practice 496+ technical interview questions with AI feedback") | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("### Settings") | |
| difficulty = gr.Radio( | |
| choices=['Easy', 'Medium', 'Hard'], | |
| value='Easy', | |
| label="Difficulty" | |
| ) | |
| start_btn = gr.Button("Get Next Question", variant="primary") | |
| with gr.Column(): | |
| gr.Markdown("### Question") | |
| question_display = gr.Textbox( | |
| label="Question", | |
| interactive=False, | |
| lines=5 | |
| ) | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("### Your Answer") | |
| answer_input = gr.Textbox( | |
| lines=6, | |
| placeholder="Your answer..." | |
| ) | |
| submit_btn = gr.Button("Submit Answer", variant="primary") | |
| with gr.Column(): | |
| gr.Markdown("### Feedback") | |
| feedback_display = gr.Textbox( | |
| interactive=False, | |
| lines=6 | |
| ) | |
| analysis_btn = gr.Button("Performance Analysis", variant="secondary") | |
| analysis_display = gr.Textbox( | |
| interactive=False, | |
| lines=12 | |
| ) | |
| start_btn.click( | |
| fn=start_interview, | |
| inputs=[difficulty], | |
| outputs=[question_display] | |
| ) | |
| submit_btn.click( | |
| fn=submit_answer, | |
| inputs=[answer_input], | |
| outputs=[feedback_display] | |
| ) | |
| analysis_btn.click( | |
| fn=show_analysis, | |
| outputs=[analysis_display] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |