CV_Reviewer / Interview.py
Jonah Ramponi
cleanup 2
0c3cc21
"""
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")