Spaces:
Running
Running
""" | |
Simulates an interview, using uploaded CV and Job Description | |
""" | |
import random | |
import streamlit as st | |
from httpx import LocalProtocolError | |
from cohere.core.api_error import ApiError | |
from utils.gpt import stream | |
def InterviewPage(): | |
"""Source Code for the Interview Simulation Page""" | |
initial_questions = [ | |
"Ready for me to grill you?", | |
"Please let me know when you're ready to begin the interview", | |
"Ready to rumble?", | |
] | |
# the initial message will be a random choice, initiating the conversation | |
if "messages" not in st.session_state: | |
st.session_state["messages"] = [ | |
{"role": "assistant", "message": random.choice(initial_questions)} | |
] | |
MESSAGES = st.session_state.messages | |
SHARED_STATE = st.session_state.shared_materials | |
API_KEY = st.session_state.api_key | |
if not SHARED_STATE["valid_flag"]: | |
st.error("You need to upload a Job Description & CV to use this feature.") | |
else: | |
clear_conversation = st.button("Clear Conversation") | |
# Clear conversation will clear message state, and initialize with a new random question | |
if clear_conversation: | |
st.session_state["messages"] = [ | |
{"role": "assistant", "message": random.choice(initial_questions)} | |
] | |
try: | |
# Populate the chat with historic messages | |
for msg in MESSAGES: | |
st.chat_message(msg["role"]).write(msg["message"]) | |
if user_input := st.chat_input(): | |
# Write the user question to UI | |
st.chat_message("user").write(user_input) | |
assistant_message = st.chat_message("assistant") | |
# Stream assistant message, using relevant background information | |
response = assistant_message.write_stream( | |
stream( | |
background_info={ | |
"cv": SHARED_STATE["cv"], | |
"job_posting": SHARED_STATE["job_posting"], | |
}, | |
chat_history=MESSAGES, | |
api_key=API_KEY, | |
) | |
) | |
# Append messages to chat history | |
MESSAGES.append({"role": "user", "message": user_input}) | |
MESSAGES.append({"role": "assistant", "message": response}) | |
except LocalProtocolError: | |
st.error("You need to enter a Cohere API Key.") | |
except ApiError: | |
st.error("You need a valid Cohere API Key") | |