Spaces:
Runtime error
Runtime error
| 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, | |
| ) |