CV_Reviewer / Interview.py
Jonah Ramponi
Cleanup
0c94c61
raw
history blame
2.56 kB
"""
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
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)}
]
if not SHARED_STATE["valid_flag"]:
st.error("You need to upload a Job Description & CV to use this feature.")
else:
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")