File size: 19,319 Bytes
5374dc3
53e376e
11b2b3a
5374dc3
11b2b3a
5374dc3
11b2b3a
bbd8964
 
5374dc3
bbd8964
 
 
 
 
11b2b3a
bbd8964
 
53e376e
bbd8964
 
11b2b3a
bbd8964
5374dc3
bbd8964
5374dc3
11b2b3a
 
 
 
bbd8964
 
f925a3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbd8964
5374dc3
f925a3c
 
11b2b3a
f925a3c
 
 
 
 
11b2b3a
f925a3c
 
 
 
11b2b3a
f925a3c
 
 
 
 
 
 
 
 
 
 
53e376e
f925a3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11b2b3a
f925a3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5374dc3
 
 
11b2b3a
39fd4f0
53e376e
11b2b3a
53e376e
 
 
39fd4f0
 
11b2b3a
 
bbd8964
11b2b3a
bbd8964
11b2b3a
 
 
 
 
bbd8964
11b2b3a
bbd8964
11b2b3a
53e376e
11b2b3a
 
bbd8964
53e376e
11b2b3a
53e376e
 
 
11b2b3a
bbd8964
 
11b2b3a
 
 
 
53e376e
11b2b3a
 
 
 
 
 
5374dc3
11b2b3a
 
 
 
f80db1c
11b2b3a
 
f80db1c
11b2b3a
 
bbd8964
11b2b3a
 
5374dc3
11b2b3a
 
 
5374dc3
11b2b3a
 
 
bbd8964
11b2b3a
 
 
 
 
 
 
 
 
 
 
f80db1c
11b2b3a
 
 
53e376e
11b2b3a
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
import gradio as gr
import google.generativeai as genai
import os
import random
import whisper

# ====== Gemini API Setup (Fallback with 2 keys) ======
API_KEYS = [os.getenv("API_KEY_1"), os.getenv("API_KEY_2")]
model = None

def initialize_model():
    global model
    for key in API_KEYS:
        try:
            genai.configure(api_key=key)
            model = genai.GenerativeModel("gemini-2.0-flash")
            test = model.generate_content("Hello!")
            if "Hello" in test.text:
                print(f"[INFO] Gemini key ending in ...{key[-4:]} is working")
                return
        except Exception as e:
            print(f"[WARNING] Gemini key failed: {e}")
    raise RuntimeError("All Gemini API keys failed.")

initialize_model()

# ====== Whisper Model for Transcription ======
whisper_model = whisper.load_model("base")

# ====== Questions (truncated to fit here; add full set yourself) ======
all_questions = {
    "general": [
    "Tell me about yourself.",
    "What are your strengths and weaknesses?",
    "How do you handle stress or pressure?",
    "Describe a time when you worked in a team.",
    "How do you manage your time and prioritize tasks?",
    "Why do you want to join this company?",
    "Where do you see yourself in 5 years?",
    "Describe a challenge or conflict you faced and how you dealt with it.",
    "What motivates you to do your best?",
    "How do you handle feedback and criticism?",
    "Tell me about a time you took initiative.",
    "How do you stay organized during busy schedules?",
    "What do you do when you face a task you don’t know how to solve?",
    "Tell me about a mistake you made and what you learned from it.",
    "Have you ever led a project or team? What was your experience?",
    "How do you manage deadlines when working on multiple tasks?",
    "Why should we hire you?",
    "Tell me about a time you failed. How did you respond?",
    "How do you approach learning something new?",
    "What do you know about our company?",
    "How do you balance quality and speed in your work?",
    "Describe a time when you had to make a difficult decision.",
    "How do you communicate in a remote or hybrid work environment?",
    "What kind of work culture are you most comfortable in?",
    "Do you prefer working independently or in a team? Why?"
    ],
    "web development": [
        "What is the difference between HTML and XHTML?",
        "Explain how RESTful APIs work.",
        "What are the advantages of using React over plain JavaScript?",
        "How does the virtual DOM improve performance?",
        "What are HTTP methods? Explain each.",
        "What is the difference between sessionStorage and localStorage?",
        "What is CORS and how do you handle it?",
        "Explain the box model in CSS.",
        "What is responsive design?",
        "What is the difference between SQL and NoSQL databases?",
        "What are web sockets and when are they used?",
        "What is a service worker in PWA?",
        "What is lazy loading and why is it useful?",
        "Difference between GET and POST requests?",
        "How does server-side rendering differ from client-side rendering?",
        "What is Next.js and how is it different from React?",
        "What is a CDN and how does it help?",
        "What is HTTPS and why is it important?",
        "Explain the concept of middleware in Express.js.",
        "What is an ORM and why use it?",
        "Explain MVC architecture.",
        "What is the difference between PUT and PATCH requests?",
        "What is GraphQL and how does it compare to REST?",
        "How do cookies and sessions work?",
        "What is JWT and how is it used in authentication?"
    ],
    "devops": [
        "What is CI/CD and why is it important?",
        "Explain the concept of Infrastructure as Code.",
        "What is Docker and how is it different from a virtual machine?",
        "What are containers and how do they help in deployment?",
        "What is Kubernetes used for?",
        "How do you monitor applications in production?",
        "What is the role of Jenkins in DevOps?",
        "What are some popular logging tools?",
        "Explain blue-green deployment.",
        "What is Ansible used for?",
        "What is Terraform and how is it used?",
        "What is a build pipeline?",
        "What is Helm in Kubernetes?",
        "What is a rolling update in deployments?",
        "Explain canary deployments.",
        "What is load balancing and how does it work?",
        "What is the difference between horizontal and vertical scaling?",
        "What are artifacts in a CI/CD pipeline?",
        "What is the use of Prometheus and Grafana?",
        "What is a reverse proxy?",
        "How do you ensure zero-downtime deployments?",
        "Explain the role of GitOps.",
        "What are secrets management tools?",
        "What is the purpose of using NGINX in DevOps?",
        "What is a container registry?"
    ],
    "cybersecurity": [
        "What is the difference between symmetric and asymmetric encryption?",
        "What is SQL injection and how do you prevent it?",
        "What are some common types of malware?",
        "What is the CIA triad?",
        "What is multi-factor authentication?",
        "What are firewalls and how do they work?",
        "Explain HTTPS and how it secures data.",
        "What is penetration testing?",
        "How do you secure an API?",
        "What are some best practices for password security?",
        "What is phishing and how can it be prevented?",
        "What is social engineering?",
        "What is a DDoS attack?",
        "What are intrusion detection systems?",
        "What is a VPN and how does it work?",
        "What is data encryption at rest vs in transit?",
        "What is a zero-day vulnerability?",
        "Explain role-based access control (RBAC).",
        "What is a digital certificate?",
        "How does a public key infrastructure (PKI) work?",
        "What is a man-in-the-middle attack?",
        "What are honeypots in cybersecurity?",
        "Explain sandboxing in malware analysis.",
        "What are security patches?",
        "What is OWASP Top 10?"
    ],
    "ai": [
        "What is the difference between AI, ML, and Deep Learning?",
        "Explain a neural network and how it learns.",
        "What is gradient descent?",
        "What is the role of activation functions in neural networks?",
        "Explain supervised vs. unsupervised learning.",
        "What is backpropagation?",
        "What is overfitting and how do you avoid it?",
        "What is transfer learning?",
        "What are some common use-cases of AI?",
        "How do you evaluate a classification model?",
        "What is reinforcement learning?",
        "What is an autoencoder?",
        "Explain convolutional neural networks (CNNs).",
        "What are recurrent neural networks (RNNs)?",
        "What is a transformer model?",
        "What is attention mechanism in NLP?",
        "What is the Turing test?",
        "What are generative adversarial networks (GANs)?",
        "What is the bias-variance tradeoff?",
        "What is explainable AI (XAI)?",
        "How do you train a deep learning model?",
        "What is early stopping in training?",
        "What are hyperparameters?",
        "What is a confusion matrix?",
        "What is the role of regularization in deep learning?"
    ],
    "ml": [
        "What is supervised learning? Give an example.",
        "What is the difference between classification and regression?",
        "How does linear regression work?",
        "What are decision trees and how do they work?",
        "What is overfitting vs underfitting?",
        "Explain cross-validation and its importance.",
        "What is regularization in machine learning?",
        "What is the difference between bagging and boosting?",
        "What is the role of a cost function?",
        "How do you handle missing data in ML datasets?",
        "What is the k-nearest neighbors (KNN) algorithm?",
        "What is support vector machine (SVM)?",
        "What is Naive Bayes algorithm?",
        "What is logistic regression?",
        "What is feature scaling and why is it needed?",
        "What is principal component analysis (PCA)?",
        "What is model drift?",
        "How do you tune hyperparameters?",
        "What is grid search and random search?",
        "What are ensemble models?",
        "What is a confusion matrix and what do its values represent?",
        "How do you balance an imbalanced dataset?",
        "What is precision-recall tradeoff?",
        "What is ROC-AUC score?",
        "What is the purpose of stratified sampling?"
    ],
    "mobile development": [
        "What is the difference between native and hybrid apps?",
        "Explain the lifecycle of an Android activity.",
        "What is Flutter and why use it?",
        "How do you handle data persistence in mobile apps?",
        "What is MVVM architecture?",
        "Explain push notifications and how they work.",
        "What are the limitations of mobile development?",
        "How do you optimize performance in mobile apps?",
        "What is the role of App Store Optimization (ASO)?",
        "Explain the concept of responsive design in mobile.",
        "What is the difference between Android and iOS development?",
        "What is React Native and how does it work?",
        "How do you handle offline mode in apps?",
        "What is a RecyclerView?",
        "Explain intents in Android.",
        "What is dependency injection in Android?",
        "What are permissions in mobile apps?",
        "How do you debug a mobile app?",
        "What is Jetpack Compose?",
        "How is state management handled in Flutter?",
        "What is a storyboard in iOS?",
        "What are background services?",
        "How do you handle API calls in mobile apps?",
        "What is the difference between LiveData and Flow?",
        "How do you publish an app to Google Play Store?"
    ],
    "uiux": [
        "What is the difference between UI and UX?",
        "What are some principles of good UX design?",
        "What is a user journey?",
        "How do you conduct user testing?",
        "What tools do you use for UI/UX design?",
        "What is wireframing?",
        "How do you design for accessibility?",
        "What is the role of prototyping?",
        "Explain the concept of design thinking.",
        "How do you collect and incorporate user feedback?",
        "What is the importance of consistency in UI design?",
        "What is heuristic evaluation?",
        "What is the role of typography in UI?",
        "What are color theory principles?",
        "How does UX impact business goals?",
        "What is A/B testing in UI/UX?",
        "What is microcopy and why is it important?",
        "Explain responsive vs adaptive design.",
        "What is a user persona?",
        "What is interaction design?",
        "What is a high-fidelity vs low-fidelity prototype?",
        "How do you measure UX success?",
        "What is card sorting?",
        "What are accessibility standards (WCAG)?",
        "What is the role of animation in UI?"
    ],
    "data analytics": [
        "What is the difference between descriptive and inferential statistics?",
        "What are some common data cleaning techniques?",
        "Explain how to deal with missing data.",
        "What is the role of data visualization?",
        "What is a pivot table?",
        "What are outliers and how do you handle them?",
        "Explain correlation vs causation.",
        "What are some commonly used data analytics tools?",
        "How do you handle large datasets efficiently?",
        "What is ETL and how does it work?",
        "What is a histogram and when is it used?",
        "What is data wrangling?",
        "What is the difference between mean, median, and mode?",
        "What is standard deviation and variance?",
        "What is a box plot?",
        "What is a time series analysis?",
        "What is the difference between R and Python for analytics?",
        "What is the use of SQL in data analytics?",
        "How do dashboards help in analytics?",
        "What is cohort analysis?",
        "What is hypothesis testing?",
        "What are confidence intervals?",
        "How do you avoid bias in analytics?",
        "What is the purpose of a heatmap?",
        "What is a funnel analysis?"
    ],
    "data scientist": [
        "What is the difference between supervised and unsupervised learning?",
        "Explain bias-variance tradeoff in machine learning.",
        "How do you handle imbalanced datasets?",
        "What are precision, recall, and F1-score? Why are they important?",
        "Describe a machine learning project you've worked on.",
        "What is feature engineering? Give examples.",
        "How do you select important variables in a dataset?",
        "Explain overfitting and how to prevent it.",
        "What’s the difference between bagging and boosting?",
        "Describe the steps in a typical machine learning pipeline.",
        "What tools do you use as a data scientist?",
        "What is dimensionality reduction?",
        "How do you evaluate regression models?",
        "What is the difference between ROC and PR curves?",
        "What is model interpretability?",
        "How do you deploy a machine learning model?",
        "What is a recommendation system?",
        "How do you deal with outliers?",
        "What is SMOTE?",
        "What is A/B testing in data science?",
        "How do you build a data pipeline?",
        "What are data lakes and data warehouses?",
        "What is a baseline model?",
        "How do you perform EDA (Exploratory Data Analysis)?",
        "What is clustering and what are its applications?"
    ],
    "prompt engineering": [
        "What is prompt engineering and why is it important?",
        "How do temperature and top_p affect model output in LLMs?",
        "How do you write a good system prompt for a chatbot?",
        "What are the risks of prompt injection attacks?",
        "What is chain-of-thought prompting?",
        "How does few-shot prompting improve performance?",
        "What are embeddings, and how are they used in retrieval-augmented generation?",
        "What are the limitations of prompt-based techniques?",
        "Explain the role of role-based prompts in function calling.",
        "How would you structure a prompt to summarize a large document accurately?",
        "What is zero-shot learning in prompt design?",
        "What is in-context learning?",
        "What is semantic search and how is it used with LLMs?",
        "How do you evaluate the output of an LLM?",
        "What is hallucination in LLMs?",
        "What are guardrails in LLM applications?",
        "What is prompt chaining?",
        "How do you personalize prompts for users?",
        "What are system vs user prompts?",
        "What is instruction tuning?",
        "How do you manage memory in prompt-based agents?",
        "What is RAG (retrieval-augmented generation)?",
        "What is the difference between deterministic and probabilistic LLM output?",
        "How do prompts interact with tools in agent systems?",
        "How do you test prompt robustness?"
    ]
}

# ====== Session State ======
session = {
    "questions": [],
    "current_index": 0,
    "scores": [],
    "feedbacks": [],
    "transcripts": []
}

# ====== Scoring with Gemini ======
def get_score(question, answer):
    prompt = f"""
You are an interview expert. A user was asked:
Question: {question}
Their answer was: "{answer}"
Please:
1. Rate from 1 to 10 based on clarity, relevance, and depth.
2. Give a 1-line constructive feedback.
Format:
1. **Rating:** <score>/10
2. **Feedback:** <text>
"""
    response = model.generate_content(prompt).text.strip()
    score = -1
    feedback = "Feedback not found"
    for line in response.split("\n"):
        if "**Rating:**" in line:
            try:
                score = int(line.split("**Rating:**")[1].split("/")[0].strip())
            except:
                pass
        elif "**Feedback:**" in line:
            feedback = line.split("**Feedback:**")[1].strip()
    return score, feedback

# ====== Summary at the End ======
def summarize_feedback(feedbacks):
    prompt = "Summarize the following feedback into 4-5 improvement tips:\n" + "\n".join(feedbacks)
    return model.generate_content(prompt).text.strip()

# ====== Transcribe Audio ======
def handle_audio(audio):
    if not audio:
        return "No audio provided"
    result = whisper_model.transcribe(audio)
    return result["text"]

# ====== Submit an Answer ======
def run_session(audio):
    if session["current_index"] >= len(session["questions"]):
        return "✅ Interview complete!", "", gr.update(visible=False)

    question = session["questions"][session["current_index"]]
    transcript = handle_audio(audio)
    session["transcripts"].append(transcript)

    score, feedback = get_score(question, transcript)
    session["scores"].append(score)
    session["feedbacks"].append(f"Q{session['current_index']+1}: {feedback}")
    session["current_index"] += 1

    if session["current_index"] < len(session["questions"]):
        next_q = session["questions"][session["current_index"]]
        return f"🗣️ Answer: {transcript}\n\n🔢 Score: {score}/10\n💬 Feedback: {feedback}\n\n➡️ Next: {next_q}", transcript, gr.update(visible=True)
    else:
        avg_score = sum(session["scores"]) / len(session["scores"])
        summary = summarize_feedback(session["feedbacks"])
        return f"✅ Interview Complete!\n\n📊 Avg Score: {avg_score:.2f}/10\n\n📝 Summary:\n{summary}", transcript, gr.update(visible=False)

# ====== Start Interview ======
def start_session(field):
    general_qs = random.sample(all_questions["general"], 10)
    domain_qs = random.sample(all_questions.get(field, []), 10)
    session["questions"] = general_qs + domain_qs
    random.shuffle(session["questions"])
    session["current_index"] = 0
    session["scores"] = []
    session["feedbacks"] = []
    session["transcripts"] = []
    return session["questions"][0], gr.update(visible=True), ""

# ====== Gradio UI ======
with gr.Blocks() as demo:
    gr.Markdown("## 🎤 AI Mock Interview (Voice-Based) — 20 Questions")
    with gr.Row():
        field = gr.Dropdown(label="Select your domain", choices=list(all_questions.keys()), value="ml")
        start_btn = gr.Button("🚀 Start Interview")
    
    question_display = gr.Textbox(label="📌 Current Question", interactive=False)
    audio = gr.Audio(type="filepath", label="🎙️ Record your Answer")
    transcript_display = gr.Textbox(label="📝 Transcript", interactive=False)
    submit_btn = gr.Button("Submit Answer", visible=False)
    output = gr.Textbox(label="💡 Feedback", lines=8)

    start_btn.click(start_session, inputs=field, outputs=[question_display, submit_btn, transcript_display])
    submit_btn.click(run_session, inputs=audio, outputs=[output, transcript_display, submit_btn])

demo.launch()