charantejapolavarapu commited on
Commit
c246737
·
verified ·
1 Parent(s): b26e70b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +84 -22
app.py CHANGED
@@ -2,6 +2,7 @@ import gradio as gr
2
  import requests
3
  import os
4
  import random
 
5
 
6
  HF_TOKEN = os.getenv("HF_TOKEN")
7
 
@@ -11,58 +12,119 @@ headers = {
11
  "Authorization": f"Bearer {HF_TOKEN}"
12
  }
13
 
14
- def generate_question(role):
15
- prompt = f"Generate one technical interview question for a {role} role."
16
-
 
 
 
 
 
 
17
  payload = {
18
- "inputs": prompt,
19
- "parameters": {"max_new_tokens": 80}
20
  }
21
 
22
  response = requests.post(API_URL, headers=headers, json=payload)
23
-
24
  if response.status_code != 200:
25
- return "Error generating question. Check your HF_TOKEN."
26
 
27
  result = response.json()
28
-
29
  if isinstance(result, list):
30
  return result[0]["generated_text"]
31
-
32
  return "Could not generate question."
33
 
 
 
 
 
34
  def evaluate_answer(answer):
35
- feedback_prompt = f"Evaluate this interview answer and give short feedback:\nAnswer: {answer}"
36
-
 
 
 
 
 
 
 
37
  payload = {
38
  "inputs": feedback_prompt,
39
- "parameters": {"max_new_tokens": 120}
40
  }
41
 
42
  response = requests.post(API_URL, headers=headers, json=payload)
43
 
44
  if response.status_code != 200:
45
- return "Error generating feedback."
46
 
47
  result = response.json()
48
 
49
  if isinstance(result, list):
50
- return result[0]["generated_text"]
 
 
 
 
 
 
51
 
52
- return "Could not evaluate answer."
53
 
 
 
 
 
54
  with gr.Blocks() as demo:
55
  gr.Markdown("# 🤖 Smart Interview Simulator (AI Voice Bot)")
56
-
57
- role = gr.Textbox(label="Enter Job Role (e.g., Data Scientist)")
58
- question_output = gr.Textbox(label="Interview Question")
59
- answer_input = gr.Textbox(label="Your Answer")
60
- feedback_output = gr.Textbox(label="AI Feedback")
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  generate_btn = gr.Button("Generate Question")
 
 
 
 
 
 
 
 
 
 
 
63
  evaluate_btn = gr.Button("Evaluate Answer")
64
 
65
- generate_btn.click(generate_question, inputs=role, outputs=question_output)
66
- evaluate_btn.click(evaluate_answer, inputs=answer_input, outputs=feedback_output)
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
  demo.launch()
 
2
  import requests
3
  import os
4
  import random
5
+ import re
6
 
7
  HF_TOKEN = os.getenv("HF_TOKEN")
8
 
 
12
  "Authorization": f"Bearer {HF_TOKEN}"
13
  }
14
 
15
+ # ----------------------------
16
+ # AI Question Generator
17
+ # ----------------------------
18
+ def generate_question(role, difficulty, resume_text):
19
+ base_prompt = f"Generate one {difficulty} level technical interview question for a {role} role."
20
+
21
+ if resume_text.strip() != "":
22
+ base_prompt += f" The candidate resume mentions: {resume_text}. Ask a question based on that."
23
+
24
  payload = {
25
+ "inputs": base_prompt,
26
+ "parameters": {"max_new_tokens": 100}
27
  }
28
 
29
  response = requests.post(API_URL, headers=headers, json=payload)
30
+
31
  if response.status_code != 200:
32
+ return "Error generating question."
33
 
34
  result = response.json()
35
+
36
  if isinstance(result, list):
37
  return result[0]["generated_text"]
38
+
39
  return "Could not generate question."
40
 
41
+
42
+ # ----------------------------
43
+ # AI Answer Evaluation + Score
44
+ # ----------------------------
45
  def evaluate_answer(answer):
46
+ feedback_prompt = f"""
47
+ Evaluate this interview answer.
48
+ Give:
49
+ 1. Short feedback
50
+ 2. Score out of 10
51
+
52
+ Answer: {answer}
53
+ """
54
+
55
  payload = {
56
  "inputs": feedback_prompt,
57
+ "parameters": {"max_new_tokens": 150}
58
  }
59
 
60
  response = requests.post(API_URL, headers=headers, json=payload)
61
 
62
  if response.status_code != 200:
63
+ return "Error generating feedback.", "0/10"
64
 
65
  result = response.json()
66
 
67
  if isinstance(result, list):
68
+ text = result[0]["generated_text"]
69
+
70
+ # Try extracting score
71
+ score_match = re.search(r"\b([0-9]|10)/10\b", text)
72
+ score = score_match.group(0) if score_match else "N/A"
73
+
74
+ return text, score
75
 
76
+ return "Could not evaluate.", "0/10"
77
 
78
+
79
+ # ----------------------------
80
+ # Gradio UI
81
+ # ----------------------------
82
  with gr.Blocks() as demo:
83
  gr.Markdown("# 🤖 Smart Interview Simulator (AI Voice Bot)")
84
+ gr.Markdown("AI-powered role-based interview practice with scoring and resume-based questions.")
85
+
86
+ with gr.Row():
87
+ role = gr.Textbox(label="Job Role (e.g., Data Scientist)")
88
+ difficulty = gr.Dropdown(
89
+ ["Easy", "Medium", "Hard"],
90
+ label="Select Difficulty",
91
+ value="Medium"
92
+ )
93
+
94
+ resume_input = gr.Textbox(
95
+ label="Paste Resume Skills / Summary (Optional)",
96
+ lines=4
97
+ )
98
+
99
+ question_output = gr.Textbox(label="Interview Question", lines=3)
100
 
101
  generate_btn = gr.Button("Generate Question")
102
+
103
+ gr.Markdown("## 🎤 Answer Section")
104
+
105
+ audio_input = gr.Audio(
106
+ sources=["microphone"],
107
+ type="filepath",
108
+ label="Speak Your Answer (Voice Input)"
109
+ )
110
+
111
+ answer_input = gr.Textbox(label="OR Type Your Answer", lines=4)
112
+
113
  evaluate_btn = gr.Button("Evaluate Answer")
114
 
115
+ feedback_output = gr.Textbox(label="AI Feedback", lines=5)
116
+ score_output = gr.Textbox(label="Score")
117
+
118
+ generate_btn.click(
119
+ generate_question,
120
+ inputs=[role, difficulty, resume_input],
121
+ outputs=question_output
122
+ )
123
+
124
+ evaluate_btn.click(
125
+ evaluate_answer,
126
+ inputs=answer_input,
127
+ outputs=[feedback_output, score_output]
128
+ )
129
 
130
  demo.launch()