File size: 4,446 Bytes
cbcf653
 
 
29002d7
1da8d89
cbcf653
 
 
 
f8d0caa
 
 
 
cbcf653
29002d7
cbcf653
 
f366e0e
29002d7
cbcf653
 
f8d0caa
9cca577
6fafee4
204eda9
f8d0caa
6fafee4
 
29002d7
6fafee4
88eb1fc
cbcf653
6fafee4
cbcf653
88eb1fc
cbcf653
 
3fc67ad
cbcf653
 
 
 
 
 
 
 
 
 
29002d7
cbcf653
29002d7
cbcf653
 
 
29002d7
 
 
 
f8d0caa
 
29002d7
f8d0caa
cbcf653
 
 
29002d7
 
d8ad835
cbcf653
 
 
 
 
 
 
 
 
 
 
29002d7
 
f8d0caa
 
 
29002d7
 
 
 
 
 
 
 
 
f8d0caa
 
 
 
 
 
 
 
 
 
 
 
29002d7
 
5fd8183
 
 
29002d7
1da8d89
f8d0caa
1da8d89
5fd8183
a8b594a
1da8d89
 
 
a8b594a
1da8d89
 
 
 
29002d7
cbcf653
 
 
 
 
 
 
 
 
 
 
 
29002d7
 
cbcf653
 
 
 
 
 
 
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import streamlit as st
import os
from streamlit_chat import message
from PyPDF2 import PdfReader
import bs4
import google.generativeai as genai
from langchain.prompts import PromptTemplate
from langchain import LLMChain
from langchain_google_genai import ChatGoogleGenerativeAI
import nest_asyncio
from langchain.document_loaders import WebBaseLoader

nest_asyncio.apply()

os.environ["GOOGLE_API_KEY"] = os.getenv("GOOGLE_API_KEY")
genai.configure(api_key=os.environ["GOOGLE_API_KEY"])

llm = ChatGoogleGenerativeAI(model="gemini-pro",
                             temperature=0.4)



template = """You are "CRETA," a friendly chatbot developed by Suriya, an AI enthusiast.

Provied URL:
{extracted_text}

Provided document:
{provided_docs}

Previous Chat history:
{chat_history}

Human: {human_input}
Chatbot:"""

prompt = PromptTemplate(
    input_variables=["chat_history", "human_input", "provided_docs","extracted_text"], template=template
)

llm_chain = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
)


previous_response = ""
provided_docs = ""
def conversational_chat(query):
    global previous_response, provided_docs
    for i in st.session_state['history']:
        if i is not None:
            previous_response += f"Human: {i[0]}\n Chatbot: {i[1]}"
    docs = ""
    for j in st.session_state["docs"]:
        if j is not None:
            docs += j

    ex_text = st.session_state["extracted_text"]
    provided_docs = docs
    result = llm_chain.predict(chat_history=previous_response, human_input=query, provided_docs=provided_docs,extracted_text=ex_text)
    st.session_state['history'].append((query, result))
    return result

st.title("Chat Bot:")
st.text("I am CRETA Your Friendly Assitant")
st.markdown("Built by [Suriya❤️](https://github.com/theSuriya)")

if 'history' not in st.session_state:
    st.session_state['history'] = []
    
# Initialize messages
if 'generated' not in st.session_state:
    st.session_state['generated'] = ["Hello ! Ask me anything"]

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

if "extracted_text" not in st.session_state:
    st.session_state["extracted_text"] = ""
    
def get_pdf_text(pdf_docs):
    text = ""
    for pdf in pdf_docs:
        pdf_reader = PdfReader(pdf)
        for page in pdf_reader.pages:
            text += page.extract_text()
    return text

def get_url_text(url_link):
    website_url = url_link
    loader = WebBaseLoader(website_url)
    loader.requests_per_second = 1
    docs = loader.aload()
    extracted_text = ""
    for page in docs:
      extracted_text+=page.page_content

    return extracted_text
    

with st.sidebar:
    st.title("Add a file for CRETA memory:")
    uploaded_files = st.file_uploader("Upload your PDF Files and Click on the Submit & Process Button", accept_multiple_files=True)
    uploaded_url = st.text_area("Please upload a URL:")

    if st.button("Submit & Process"):
        if uploaded_files or uploaded_url:
            with st.spinner("Processing..."):
                if uploaded_files:
                    pdf_text = get_pdf_text(uploaded_files)
                    st.session_state["docs"] += get_pdf_text(uploaded_files)
                
                if uploaded_url:
                    url_text = get_url_text(uploaded_url)
                    st.session_state["extracted_text"] += get_url_text(uploaded_url)
                
                st.success("Processing complete!")
        else:
            st.error("Please upload at least one PDF file or provide a URL.")
    
# Create containers for chat history and user input
response_container = st.container()
container = st.container()

# User input form
user_input = st.chat_input("Ask Your Questions 👉..")
with container:
    if user_input:
        output = conversational_chat(user_input)
        # answer = response_generator(output)
        st.session_state['past'].append(user_input)
        st.session_state['generated'].append(output)
        
        
# Display chat history
if st.session_state['generated']:
    with response_container:
        for i in range(len(st.session_state['generated'])):
            if i != 0:
                message(st.session_state["past"][i], is_user=True, key=str(i) + '_user', avatar_style="adventurer")
            message(st.session_state["generated"][i], key=str(i), avatar_style="bottts")