|
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) |
|
|
|
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)) |
|
|
|
|
|
st.session_state.retriever = st.session_state.docsearch.as_retriever(search_type="similarity") |
|
|
|
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) |
|
|
|
st.session_state.memory = ConversationBufferMemory() |
|
|
|
|
|
st.session_state.history = [] |
|
|
|
|
|
st.session_state.token_count = 0 |
|
|
|
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 = 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) |
|
|
|
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, |
|
) |