Spaces:
Sleeping
Sleeping
import streamlit as st | |
from langchain.embeddings import OpenAIEmbeddings | |
from langchain.vectorstores import FAISS | |
from langchain.text_splitter import NLTKTextSplitter | |
from langchain.memory import ConversationBufferMemory | |
from langchain.chains import RetrievalQA, ConversationChain | |
from prompts.prompts import templates | |
from langchain.prompts.prompt import PromptTemplate | |
from langchain.chat_models import ChatOpenAI | |
from PyPDF2 import PdfReader | |
from prompts.prompt_selector import prompt_sector | |
def embedding(text): | |
"""embeddings""" | |
text_splitter = NLTKTextSplitter() | |
texts = text_splitter.split_text(text) | |
# Create emebeddings | |
embeddings = OpenAIEmbeddings() | |
docsearch = FAISS.from_texts(texts, embeddings) | |
return docsearch | |
def resume_reader(resume): | |
pdf_reader = PdfReader(resume) | |
text = "" | |
for page in pdf_reader.pages: | |
text += page.extract_text() | |
return text | |
def initialize_session_state(template=None, position=None): | |
""" initialize session states """ | |
if 'jd' in st.session_state: | |
st.session_state.docsearch = embedding(st.session_state.jd) | |
else: | |
st.session_state.docsearch = embedding(resume_reader(st.session_state.resume)) | |
#if 'retriever' not in st.session_state: | |
st.session_state.retriever = st.session_state.docsearch.as_retriever(search_type="similarity") | |
#if 'chain_type_kwargs' not in st.session_state: | |
if 'jd' in st.session_state: | |
Interview_Prompt = PromptTemplate(input_variables=["context", "question"], | |
template=template) | |
st.session_state.chain_type_kwargs = {"prompt": Interview_Prompt} | |
else: | |
st.session_state.chain_type_kwargs = prompt_sector(position, templates) | |
#if 'memory' not in st.session_state: | |
st.session_state.memory = ConversationBufferMemory() | |
# interview history | |
#if "history" not in st.session_state: | |
st.session_state.history = [] | |
# token count | |
#if "token_count" not in st.session_state: | |
st.session_state.token_count = 0 | |
#if "guideline" not in st.session_state: | |
llm = ChatOpenAI( | |
model_name="gpt-3.5-turbo", | |
temperature=0.6, ) | |
st.session_state.guideline = RetrievalQA.from_chain_type( | |
llm=llm, | |
chain_type_kwargs=st.session_state.chain_type_kwargs, chain_type='stuff', | |
retriever=st.session_state.retriever, memory=st.session_state.memory).run( | |
"Create an interview guideline and prepare only one questions for each topic. Make sure the questions tests the technical knowledge") | |
# llm chain and memory | |
#if "screen" not in st.session_state: | |
llm = ChatOpenAI( | |
model_name="gpt-3.5-turbo", | |
temperature=0.8, ) | |
PROMPT = PromptTemplate( | |
input_variables=["history", "input"], | |
template="""I want you to act as an interviewer strictly following the guideline in the current conversation. | |
Ask me questions and wait for my answers like a real person. | |
Do not write explanations. | |
Ask question like a real person, only one question at a time. | |
Do not ask the same question. | |
Do not repeat the question. | |
Do ask follow-up questions if necessary. | |
You name is GPTInterviewer. | |
I want you to only reply as an interviewer. | |
Do not write all the conversation at once. | |
If there is an error, point it out. | |
Current Conversation: | |
{history} | |
Candidate: {input} | |
AI: """) | |
st.session_state.screen = ConversationChain(prompt=PROMPT, llm=llm, | |
memory=st.session_state.memory) | |
#if "feedback" not in st.session_state: | |
llm = ChatOpenAI( | |
model_name = "gpt-3.5-turbo", | |
temperature = 0.5,) | |
st.session_state.feedback = ConversationChain( | |
prompt=PromptTemplate(input_variables = ["history", "input"], template = templates.feedback_template), | |
llm=llm, | |
memory = st.session_state.memory, | |
) |