Spaces:
Paused
Paused
Commit
·
cb47676
1
Parent(s):
e69177d
check up done
Browse files- app.py +1 -1
- backend/routes/interview_api.py +1 -1
- backend/services/report_generator.py +24 -10
- backend/templates/closing.html +3 -0
- backend/templates/interview.html +1 -1
- backend/templates/post_job.html +1 -1
app.py
CHANGED
@@ -272,7 +272,7 @@ def post_job():
|
|
272 |
# Validate number of questions; must be a positive integer. Store
|
273 |
# errors if the input is provided but invalid. Missing values will
|
274 |
# fall back to the default of 3.
|
275 |
-
num_questions =
|
276 |
if num_questions_raw:
|
277 |
try:
|
278 |
parsed_nq = int(num_questions_raw)
|
|
|
272 |
# Validate number of questions; must be a positive integer. Store
|
273 |
# errors if the input is provided but invalid. Missing values will
|
274 |
# fall back to the default of 3.
|
275 |
+
num_questions = 4
|
276 |
if num_questions_raw:
|
277 |
try:
|
278 |
parsed_nq = int(num_questions_raw)
|
backend/routes/interview_api.py
CHANGED
@@ -242,7 +242,7 @@ def process_answer():
|
|
242 |
logging.error(f"Error saving interview log: {log_err}")
|
243 |
|
244 |
# Determine the number of questions configured for this job
|
245 |
-
total_questions =
|
246 |
if job_id is not None:
|
247 |
try:
|
248 |
job = Job.query.get(int(job_id))
|
|
|
242 |
logging.error(f"Error saving interview log: {log_err}")
|
243 |
|
244 |
# Determine the number of questions configured for this job
|
245 |
+
total_questions = 4
|
246 |
if job_id is not None:
|
247 |
try:
|
248 |
job = Job.query.get(int(job_id))
|
backend/services/report_generator.py
CHANGED
@@ -304,18 +304,29 @@ def create_pdf_report(report_text: str) -> BytesIO:
|
|
304 |
y_pos -= 0.8
|
305 |
|
306 |
# Skills details (simplified)
|
307 |
-
|
308 |
-
|
|
|
|
|
|
|
309 |
|
310 |
y_pos -= 0.3
|
311 |
|
312 |
-
|
313 |
-
|
|
|
|
|
|
|
|
|
314 |
|
315 |
y_pos -= 0.3
|
316 |
|
317 |
-
|
318 |
-
|
|
|
|
|
|
|
|
|
319 |
|
320 |
y_pos -= 0.8
|
321 |
|
@@ -341,10 +352,13 @@ def create_pdf_report(report_text: str) -> BytesIO:
|
|
341 |
break
|
342 |
|
343 |
# Question
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
|
|
|
|
|
|
348 |
|
349 |
# Answer
|
350 |
answer_text = qa['answer']
|
|
|
304 |
y_pos -= 0.8
|
305 |
|
306 |
# Skills details (simplified)
|
307 |
+
required_text = f"Required Skills: {skills_data['required']}"
|
308 |
+
for line in textwrap.wrap(required_text, width=85):
|
309 |
+
ax.text(LEFT_MARGIN, y_pos, line,
|
310 |
+
fontsize=10, color=TEXT_COLOR, fontfamily='sans-serif')
|
311 |
+
y_pos -= 0.3
|
312 |
|
313 |
y_pos -= 0.3
|
314 |
|
315 |
+
candidate_text = f"Candidate Skills: {skills_data['candidate']}"
|
316 |
+
for line in textwrap.wrap(candidate_text, width=85):
|
317 |
+
ax.text(LEFT_MARGIN, y_pos, line,
|
318 |
+
fontsize=10, color=TEXT_COLOR, fontfamily='sans-serif')
|
319 |
+
y_pos -= 0.3
|
320 |
+
|
321 |
|
322 |
y_pos -= 0.3
|
323 |
|
324 |
+
matching_text = f"Matching Skills: {skills_data['common']}"
|
325 |
+
for line in textwrap.wrap(matching_text, width=85):
|
326 |
+
ax.text(LEFT_MARGIN, y_pos, line,
|
327 |
+
fontsize=10, color=TEXT_COLOR, fontfamily='sans-serif')
|
328 |
+
y_pos -= 0.3
|
329 |
+
|
330 |
|
331 |
y_pos -= 0.8
|
332 |
|
|
|
352 |
break
|
353 |
|
354 |
# Question
|
355 |
+
question_text = f"Q{i+1}: {qa['question']}"
|
356 |
+
for line in textwrap.wrap(question_text, width=85):
|
357 |
+
ax.text(LEFT_MARGIN, y_pos, line,
|
358 |
+
fontsize=11, fontweight='bold', color=ACCENT_COLOR, fontfamily='sans-serif')
|
359 |
+
y_pos -= 0.25
|
360 |
+
y_pos -= 0.15 # extra spacing after question block
|
361 |
+
|
362 |
|
363 |
# Answer
|
364 |
answer_text = qa['answer']
|
backend/templates/closing.html
CHANGED
@@ -14,6 +14,9 @@
|
|
14 |
</div>
|
15 |
</div>
|
16 |
<h2 style="margin-top: 1rem;">Thank you for your time,<br>we will get back to you if shortlisted.</h2>
|
|
|
|
|
|
|
17 |
</div>
|
18 |
</div>
|
19 |
</section>
|
|
|
14 |
</div>
|
15 |
</div>
|
16 |
<h2 style="margin-top: 1rem;">Thank you for your time,<br>we will get back to you if shortlisted.</h2>
|
17 |
+
<p style="margin-top: 0.5rem; font-size: 1rem;">
|
18 |
+
Overall performance: {{ score }} ({{ feedback_summary }})
|
19 |
+
</p>
|
20 |
</div>
|
21 |
</div>
|
22 |
</section>
|
backend/templates/interview.html
CHANGED
@@ -499,7 +499,7 @@
|
|
499 |
// has been populated server‑side using ``job.num_questions``.
|
500 |
const totalSpan = document.getElementById('totalQuestions');
|
501 |
const parsedTotal = parseInt(totalSpan && totalSpan.textContent);
|
502 |
-
this.totalQuestions = Number.isNaN(parsedTotal) || parsedTotal <= 0 ?
|
503 |
// Ensure the counter display shows the correct total number of
|
504 |
// questions. Without this update the span would retain the
|
505 |
// server‑rendered value even if the fallback above changed
|
|
|
499 |
// has been populated server‑side using ``job.num_questions``.
|
500 |
const totalSpan = document.getElementById('totalQuestions');
|
501 |
const parsedTotal = parseInt(totalSpan && totalSpan.textContent);
|
502 |
+
this.totalQuestions = Number.isNaN(parsedTotal) || parsedTotal <= 0 ? 4 : parsedTotal;
|
503 |
// Ensure the counter display shows the correct total number of
|
504 |
// questions. Without this update the span would retain the
|
505 |
// server‑rendered value even if the fallback above changed
|
backend/templates/post_job.html
CHANGED
@@ -47,7 +47,7 @@
|
|
47 |
</div>
|
48 |
<div class="form-group">
|
49 |
<label for="num_questions">Number of Interview Questions</label>
|
50 |
-
<input type="number" name="num_questions" id="num_questions" class="form-control" min="1" value="
|
51 |
<small style="color: #666; display: block; margin-top: 0.25rem;">Specify how many questions the AI interview should ask (minimum 1).</small>
|
52 |
</div>
|
53 |
<div class="application-actions" style="margin-top: 2rem; text-align: center;">
|
|
|
47 |
</div>
|
48 |
<div class="form-group">
|
49 |
<label for="num_questions">Number of Interview Questions</label>
|
50 |
+
<input type="number" name="num_questions" id="num_questions" class="form-control" min="1" value="4" required placeholder="e.g. 5">
|
51 |
<small style="color: #666; display: block; margin-top: 0.25rem;">Specify how many questions the AI interview should ask (minimum 1).</small>
|
52 |
</div>
|
53 |
<div class="application-actions" style="margin-top: 2rem; text-align: center;">
|