Spaces:
Sleeping
Sleeping
import os | |
import pinecone | |
import openai | |
from langchain.embeddings.openai import OpenAIEmbeddings | |
# from langchain.text_splitter import CharacterTextSplitter | |
# from langchain.document_loaders import PyPDFLoader | |
from langchain.vectorstores import Pinecone | |
from langchain.chains import ConversationalRetrievalChain | |
from langchain.chat_models import ChatOpenAI | |
import streamlit as st | |
def _initialize_env(): | |
pinecone.init( | |
api_key=st.secrets["pinecone_api_key"], | |
environment=st.secrets["pinecone_env"] | |
) | |
openai.api_key = st.secrets["openai_api_key"] | |
os.environ['OPENAI_API_KEY'] = st.secrets["openai_api_key"] | |
def _initialize_indexes(): | |
embeddings = OpenAIEmbeddings() | |
# loader = PyPDFLoader("./etf-book.pdf") | |
# documents = loader.load() | |
# text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) | |
# docs = text_splitter.split_documents(documents) | |
# db = Pinecone.from_documents( | |
# docs, | |
# embeddings, | |
# index_name=st.secrets["pinecone_table_name"] | |
# ) | |
db_object = Pinecone.from_existing_index( | |
st.secrets["pinecone_table_name"], | |
embeddings | |
) | |
return db_object | |
def _initialize_retriever(db_object): | |
retriever = db_object.as_retriever(search_type="similarity", search_kwargs={"k": 2}) | |
qa = ConversationalRetrievalChain.from_llm( | |
ChatOpenAI(temperature=0), | |
retriever | |
) | |
return qa | |
chat_history = [] | |
def answer(user_input): | |
if user_input == '': | |
return | |
global chat_history | |
result = qa({ | |
"question": user_input, | |
"chat_history": chat_history | |
}) | |
chat_history.append((user_input, result["answer"])) | |
chat_history = chat_history[-10:] | |
st.write( | |
"Bot: ", | |
result["answer"] | |
) | |
_initialize_env() | |
db = _initialize_indexes() | |
qa = _initialize_retriever(db) | |
question = st.text_input('Question') | |
answer(question) | |