Spaces:
Running
Running
def bot_response(history): | |
if not interview_state.interview_history: | |
reset_interview_action(interview_state.selected_interviewer) | |
if interview_state.interview_history[-1]["role"] == "user": | |
interview_state.question_count += 1 | |
voice = interview_state.get_voice_setting() | |
if interview_state.question_count > interview_state.n_of_questions: | |
response = "That's all for now. Thank you for your time!" | |
interview_state.interview_finished = True | |
else: | |
# Select prompts based on interview type | |
if interview_state.interview_type == "hr": | |
if not interview_state.knowledge_retrieval_setup: | |
response = get_default_hr_questions( | |
interview_state.question_count | |
) | |
else: | |
if interview_state.question_count == 1: | |
response = get_initial_question( | |
interview_state.interview_chain | |
) | |
else: | |
response = get_next_response( | |
interview_state.interview_chain, | |
interview_state.interview_history[-1]["content"] if interview_state.interview_history[-1]["role"] == "user" else "", | |
[ | |
msg["content"] | |
for msg in interview_state.interview_history | |
if msg.get("role") == "user" | |
], | |
interview_state.question_count, | |
) | |
elif interview_state.interview_type == "sarah": | |
response = get_next_response( | |
interview_state.interview_chain, | |
interview_state.interview_history[-1]["content"] if interview_state.interview_history[-1]["role"] == "user" else "", | |
[ | |
msg["content"] | |
for msg in interview_state.interview_history | |
if msg.get("role") == "user" | |
], | |
interview_state.question_count, | |
) | |
elif interview_state.interview_type == "aaron": | |
response = get_next_response( | |
interview_state.interview_chain, | |
interview_state.interview_history[-1]["content"] if interview_state.interview_history[-1]["role"] == "user" else "", | |
[ | |
msg["content"] | |
for msg in interview_state.interview_history | |
if msg.get("role") == "user" | |
], | |
interview_state.question_count, | |
) | |
else: | |
response = "Invalid interview type." | |
audio_buffer = BytesIO() | |
convert_text_to_speech(response, audio_buffer, voice) | |
audio_buffer.seek(0) | |
with tempfile.NamedTemporaryFile( | |
suffix=".mp3", delete=False | |
) as temp_file: | |
temp_audio_path = temp_file.name | |
temp_file.write(audio_buffer.getvalue()) | |
interview_state.temp_audio_files.append(temp_audio_path) | |
history.append({"role": "assistant", "content": response}) | |
interview_state.interview_history.append({"role": "assistant", "content": response}) | |
if interview_state.interview_finished: | |
conclusion_message = "Thank you for being here. We will review your responses and provide feedback soon." | |
history.append( | |
{"role": "system", "content": conclusion_message} | |
) | |
interview_state.interview_history.append({"role": "system", "content": conclusion_message}) | |
txt_path = save_interview_history( | |
[msg["content"] for msg in history if msg["role"] != "system"], interview_state.language | |
) | |
if txt_path: | |
return ( | |
history, | |
gr.Audio( | |
value=temp_audio_path, | |
autoplay=True, | |
visible=True, | |
), | |
gr.File(visible=True, value=txt_path), | |
gr.Textbox(interactive=False) | |
) | |
else: | |
return ( | |
history, | |
gr.Audio( | |
value=temp_audio_path, | |
autoplay=True, | |
visible=True, | |
), | |
None, | |
gr.Textbox(interactive=False) | |
) | |
return ( | |
history, | |
gr.Audio( | |
value=temp_audio_path, autoplay=True, visible=True | |
), | |
None, | |
gr.Textbox(interactive=True) | |
) |