File size: 2,599 Bytes
f472a4f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72396e8
 
f472a4f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
"""Python file to serve as the frontend"""
import streamlit as st
from streamlit_chat import message

from langchain.chains import ConversationChain
from langchain.llms import OpenAI
import os
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Pinecone
from langchain.document_loaders import TextLoader
import pinecone 
from langchain.document_loaders import TextLoader
import streamlit as st
# import pandas as pd
from constants import INDEX_NAME, NAMESPACE,PINECONE_ENV
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.chains.question_answering import load_qa_chain



PINECONE_API_KEY= st.secrets["PINECONE_API_KEY"]
OPENAI_API_KEY = st.secrets["OPENAI_API_KEY"]

os.environ['OPENAI_API_KEY'] =OPENAI_API_KEY

# initialize pinecone
pinecone.init(
    api_key=PINECONE_API_KEY,  # find at app.pinecone.io
    environment=PINECONE_ENV  # next to api key in console
)

embeddings = OpenAIEmbeddings()

llm = OpenAI(temperature=0)

@st.cache_resource
def load_pinecone_existing_index(question):
    pass
    searchIndex = Pinecone.from_existing_index(index_name=INDEX_NAME,embedding = embeddings, namespace=NAMESPACE)
    docsReturned = searchIndex.similarity_search(question, k=2)
    return docsReturned

@st.cache_resource
def get_answer(question):
    chain = load_qa_chain(llm, chain_type="stuff")
    docs=load_pinecone_existing_index(question)
    answer = chain.run(input_documents=docs, question=question)
    return answer
# chain = load_qa_chain(llm, chain_type="stuff")
# answer = chain.run(input_documents=docs, question=QUERY)

# From here down is all the StreamLit UI.
st.set_page_config(page_title="Langchain Chat with PDF", page_icon=":robot:")
st.header("Chat with PDF Example")

if "generated" not in st.session_state:
    st.session_state["generated"] = []

if "past" not in st.session_state:
    st.session_state["past"] = []


def get_text():
    input_text = st.text_input("You: ", "Hi,how are you.", key="input")
    return input_text


user_input = get_text()

if user_input:
    # output = chain.run(input=user_input)
    output = get_answer(user_input)

    st.session_state.past.append(user_input)
    st.session_state.generated.append(output)

if st.session_state["generated"]:

    for i in range(len(st.session_state["generated"]) - 1, -1, -1):
        message(st.session_state["generated"][i], key=str(i))
        message(st.session_state["past"][i], is_user=True, key=str(i) + "_user")