Spaces:
Paused
Paused
import os | |
import uuid | |
import json | |
from flask import Blueprint, request, jsonify, url_for | |
from flask_login import login_required, current_user | |
from backend.models.database import db, Job, Application | |
from backend.services.interview_engine import ( | |
generate_first_question, | |
edge_tts_to_file_sync, | |
whisper_stt, | |
evaluate_answer | |
) | |
interview_api = Blueprint("interview_api", __name__) | |
def start_interview(): | |
data = request.get_json() | |
job_id = data.get("job_id") | |
job = Job.query.get_or_404(job_id) | |
application = Application.query.filter_by( | |
user_id=current_user.id, | |
job_id=job_id | |
).first() | |
if not application or not application.extracted_features: | |
return jsonify({"error": "No application/profile data found."}), 400 | |
try: | |
profile = json.loads(application.extracted_features) | |
except: | |
return jsonify({"error": "Invalid profile JSON"}), 500 | |
question = generate_first_question(profile, job) | |
# Create static/audio directory if it doesn't exist | |
audio_dir = os.path.join("static", "audio") | |
os.makedirs(audio_dir, exist_ok=True) | |
audio_filename = f"q_{uuid.uuid4().hex}.wav" | |
audio_path = os.path.join(audio_dir, audio_filename) | |
# Generate audio | |
edge_tts_to_file_sync(question, audio_path) | |
return jsonify({ | |
"question": question, | |
"audio_url": url_for("static", filename=f"audio/{audio_filename}") | |
}) | |
def transcribe_audio(): | |
audio_file = request.files.get("audio") | |
if not audio_file: | |
return jsonify({"error": "No audio file received."}), 400 | |
# Create temp directory if it doesn't exist | |
temp_dir = "temp" | |
os.makedirs(temp_dir, exist_ok=True) | |
filename = f"user_audio_{uuid.uuid4().hex}.wav" | |
path = os.path.join(temp_dir, filename) | |
audio_file.save(path) | |
transcript = whisper_stt(path) | |
# Clean up | |
try: | |
os.remove(path) | |
except: | |
pass | |
return jsonify({"transcript": transcript}) | |
def process_answer(): | |
data = request.get_json() | |
answer = data.get("answer", "") | |
question_idx = data.get("questionIndex", 0) | |
# Generate next question (simplified for now) | |
next_question = f"Follow-up question {question_idx + 2}: Can you elaborate on your experience with relevant technologies?" | |
# Create audio for next question | |
audio_dir = os.path.join("static", "audio") | |
os.makedirs(audio_dir, exist_ok=True) | |
audio_filename = f"q_{uuid.uuid4().hex}.wav" | |
audio_path = os.path.join(audio_dir, audio_filename) | |
edge_tts_to_file_sync(next_question, audio_path) | |
return jsonify({ | |
"success": True, | |
"nextQuestion": next_question, | |
"audioUrl": url_for("static", filename=f"audio/{audio_filename}"), | |
"evaluation": { | |
"score": "medium", | |
"feedback": "Good answer, but be more specific." | |
}, | |
"isComplete": question_idx >= 2, | |
"summary": [] | |
}) |