Swami-speaks / app.py
callmesan's picture
Update app.py
c88d77a
'''
Om Sri Sai Ram
Swami's Chatbot Alpha Version
'''
from langchain.vectorstores import FAISS
from langchain.memory import ConversationBufferMemory
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain import PromptTemplate
import textwrap
import gradio as gr
import time
import os
OPENAI_API_KEY=os.environ["OPENAI_API_KEY"]
vectordb = FAISS.load_local("faiss_index", OpenAIEmbeddings())
# --------------------------------------------------------------------------------
prompt_template = """
Answer "Sairam, How can I help you!" if you get Sairam as a Question.
Don't try to make up an answer, if you don't know just say that you don't know.
Answer in the same language the question was asked.
Use only the following pieces of context to answer the question at the end.
{context}
{history}
Question: {question}
Answer:"""
PROMPT = PromptTemplate(
template= prompt_template,
input_variables=["history","context", "question"]
)
chain = RetrievalQA.from_chain_type(llm= OpenAI(model_name= "gpt-3.5-turbo-0613", temperature= 0),
chain_type="stuff",
retriever= vectordb.as_retriever(),
chain_type_kwargs= {'prompt': PROMPT,
"verbose": True,
"memory": ConversationBufferMemory(
memory_key="history",
input_key="question"),
},
return_source_documents= True,
verbose= True)
# --------------------------------------------------------------------------------
def wrap_text_preserve_newlines(text, width=200): # 110
# Split the input text into lines based on newline characters
lines = text.split('\n')
# Wrap each line individually
wrapped_lines = [textwrap.fill(line, width=width) for line in lines]
# Join the wrapped lines back together using newline characters
wrapped_text = '\n'.join(wrapped_lines)
return wrapped_text
def process_llm_response(llm_response):
ans = wrap_text_preserve_newlines(llm_response['result'])
print(llm_response)
src = {'Bhagavatha Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Bhagavatha/BhagavathaVahiniInteractive.pdf',
'Dharma Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Dharma/DharmaVahiniInteractive.pdf',
'Dhyana Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Dhyana/DhyanaVahiniInteractive.pdf',
'Gita Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Gita/GitaVahiniInteractive.pdf',
'Jnana Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Jnana/JnanaVahiniInteractive.pdf',
'Leela Kaivalya Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Leela/LeelaKaivalyaVahiniInteractive.pdf',
'Prasanthi Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Prasanthi/PrasanthiVahiniInteractive.pdf',
'Prasnothara Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Prasnottara/PrasnotharaVahiniInteractive.pdf',
'Prema Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Prema/PremaVahiniInteractive.pdf',
'Ramakatha Rasavahini 1.pdf' : 'https://www.sssbpt.info/vahinis/RamakathaI/RamakathaRasavahiniIInteractive.pdf',
'Ramakatha Rasavahini 2.pdf' : 'https://www.sssbpt.info/vahinis/RamakathaII/RamakathaRasavahini2Interactive.pdf',
'Sandeha Nivarini.pdf' : 'https://www.sssbpt.info/vahinis/Sandeha/SandehaNivariniInteractive.pdf',
'Sathya Sai Speaks Volume 01 1953 to 1960.pdf' : 'https://www.sssbpt.info/ssspeaks/volume01/sss01.pdf',
'Sathya Sai Speaks Volume 02 1961 to 1962.pdf' : 'https://www.sssbpt.info/ssspeaks/volume02/sss02.pdf',
'Sathya Sai Speaks Volume 03 1963.pdf' : 'https://www.sssbpt.info/ssspeaks/volume03/sss03.pdf',
'Sathya Sai Speaks Volume 04 1964.pdf' : 'https://www.sssbpt.info/ssspeaks/volume04/sss04.pdf',
'Sathya Sai Speaks Volume 05 1965.pdf' : 'https://www.sssbpt.info/ssspeaks/volume05/sss05.pdf ',
'Sathya Sai Speaks Volume 06 1966.pdf' : 'https://www.sssbpt.info/ssspeaks/volume06/sss06.pdf',
'Sathya Sai Speaks Volume 07 1967.pdf' : 'https://www.sssbpt.info/ssspeaks/volume07/sss07.pdf',
'Sathya Sai Speaks Volume 08 1968.pdf' : 'https://www.sssbpt.info/ssspeaks/volume08/sss08.pdf',
'Sathya Sai Speaks Volume 09 1969.pdf' : 'https://www.sssbpt.info/ssspeaks/volume09/sss09.pdf',
'Sathya Sai Speaks Volume 10 1970.pdf' : 'https://www.sssbpt.info/ssspeaks/volume10/sss10.pdf',
'Sathya Sai Speaks Volume 11 1971 to 1972.pdf' : 'https://www.sssbpt.info/ssspeaks/volume11/sss11.pdf',
'Sathya Sai Speaks Volume 12 1973 to 1974.pdf' : 'https://www.sssbpt.info/ssspeaks/volume12/sss12.pdf',
'Sathya Sai Speaks Volume 13 1975 to 1977.pdf' : 'https://www.sssbpt.info/ssspeaks/volume13/sss13.pdf',
'Sathya Sai Speaks Volume 14 1978 to 1980.pdf' : 'https://www.sssbpt.info/ssspeaks/volume14/sss14.pdf',
'Sathya Sai Speaks Volume 15 1981 to 1982.pdf' : 'https://www.sssbpt.info/ssspeaks/volume15/sss15.pdf',
'Sathya Sai Speaks Volume 16 1983.pdf' : 'https://www.sssbpt.info/ssspeaks/volume16/sss16.pdf',
'Sathya Sai Speaks Volume 17 1984.pdf' : 'https://www.sssbpt.info/ssspeaks/volume17/sss17.pdf',
'Sathya Sai Speaks Volume 18 1985.pdf' : 'https://www.sssbpt.info/ssspeaks/volume18/sss18.pdf',
'Sathya Sai Speaks Volume 19 1986.pdf' : 'https://www.sssbpt.info/ssspeaks/volume19/sss19.pdf',
'Sathya Sai Speaks Volume 20 1987.pdf' : 'https://www.sssbpt.info/ssspeaks/volume20/sss20.pdf',
'Sathya Sai Speaks Volume 21 1988.pdf' : 'https://www.sssbpt.info/ssspeaks/volume21/sss21.pdf',
'Sathya Sai Speaks Volume 22 1989.pdf' : 'https://www.sssbpt.info/ssspeaks/volume22/sss22.pdf',
'Sathya Sai Speaks Volume 23 1990.pdf' : 'https://www.sssbpt.info/ssspeaks/volume23/sss23.pdf',
'Sathya Sai Speaks Volume 24 1991.pdf' : 'https://www.sssbpt.info/ssspeaks/volume24/sss24.pdf',
'Sathya Sai Speaks Volume 25 1992.pdf' : 'https://www.sssbpt.info/ssspeaks/volume25/sss25.pdf',
'Sathya Sai Speaks Volume 26 1993.pdf' : 'https://www.sssbpt.info/ssspeaks/volume26/sss26.pdf',
'Sathya Sai Speaks Volume 27 1994.pdf' : 'https://www.sssbpt.info/ssspeaks/volume27/sss27.pdf',
'Sathya Sai Speaks Volume 28 1995.pdf' : 'https://www.sssbpt.info/ssspeaks/volume28/sss28.pdf',
'Sathya Sai Speaks Volume 29 1996.pdf' : 'https://www.sssbpt.info/ssspeaks/volume29/sss29.pdf',
'Sathya Sai Speaks Volume 30 1997.pdf' : 'https://www.sssbpt.info/ssspeaks/volume30/sss30.pdf',
'Sathya Sai Speaks Volume 31 1998.pdf' : 'https://www.sssbpt.info/ssspeaks/volume31/sss31.pdf',
'Sathya Sai Speaks Volume 32 Part 1 1999.pdf' : 'https://www.sssbpt.info/ssspeaks/volume32/sss32p1.pdf',
'Sathya Sai Speaks Volume 32 Part 2 1999.pdf' : 'https://www.sssbpt.info/ssspeaks/volume32/sss32p2.pdf',
'Sathya Sai Speaks Volume 33 2000.pdf' : 'https://www.sssbpt.info/ssspeaks/volume33/sss33.pdf',
'Sathya Sai Speaks Volume 34 2001.pdf' : 'https://www.sssbpt.info/ssspeaks/volume34/sss34.pdf',
'Sathya Sai Speaks Volume 35 2002.pdf' : 'https://www.sssbpt.info/ssspeaks/volume35/sss35.pdf',
'Sathya Sai Speaks Volume 36 2003.pdf' : 'https://www.sssbpt.info/ssspeaks/volume36/sss36.pdf',
'Sathya Sai Speaks Volume 37 2004.pdf' : 'https://www.sssbpt.info/ssspeaks/volume37/sss37.pdf',
'Sathya Sai Speaks Volume 38 2005.pdf' : 'https://www.sssbpt.info/ssspeaks/volume38/sss38.pdf',
'Sathya Sai Speaks Volume 39 2006.pdf' : 'https://www.sssbpt.info/ssspeaks/volume39/sss39.pdf',
'Sathya Sai Speaks Volume 40 2007.pdf' : 'https://www.sssbpt.info/ssspeaks/volume40/sss40.pdf',
'Sathya Sai Speaks Volume 41 2008.pdf' : 'https://www.sssbpt.info/ssspeaks/volume41/sss41.pdf',
'Sathya Sai Speaks Volume 42 2009.pdf' : 'https://www.sssbpt.info/ssspeaks/volume42/sss42.pdf',
'Sathya Sai Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Sathyasai/SathyaSaiVahiniInteractive.pdf',
'Summer Roses On The Blue Mountains 1976.pdf' : 'https://www.sssbpt.info/summershowers/ss1976/ss1976.pdf',
'Summer Showers 1990.pdf' : 'https://www.sssbpt.info/summershowers/ss1990/ss1990.pdf',
'Summer Showers In Brindavan 1972.pdf' : 'https://www.sssbpt.info/summershowers/ss1972/ss1972.pdf',
'Summer Showers In Brindavan 1973.pdf' : 'https://www.sssbpt.info/summershowers/ss1973/ss1973.pdf',
'Summer Showers In Brindavan 1974 Part 1.pdf' : 'https://www.sssbpt.info/summershowers/ss1974/ss1974part1.pdf',
'Summer Showers In Brindavan 1974 Part 2.pdf' : 'https://www.sssbpt.info/summershowers/ss1974/ss1974part2.pdf',
'Summer Showers In Brindavan 1977.pdf' : 'https://www.sssbpt.info/summershowers/ss1977/ss1977.pdf',
'Summer Showers In Brindavan 1978.pdf' : 'https://www.sssbpt.info/summershowers/ss1978/ss1978.pdf',
'Summer Showers In Brindavan 1979.pdf' : ' https://www.sssbpt.info/summershowers/ss1979/ss1979.pdf',
'Summer Showers In Brindavan 1991.pdf' : 'https://www.sssbpt.info/summershowers/ss1991/ss1991.pdf',
'Summer Showers In Brindavan 1993.pdf' : 'https://www.sssbpt.info/summershowers/ss1993/ss1993.pdf',
'Summer Showers In Brindavan 1995.pdf' : 'https://www.sssbpt.info/summershowers/ss1995/ss1995.pdf',
'Summer Showers In Brindavan 1996.pdf' : 'https://www.sssbpt.info/summershowers/ss1996/ss1996.pdf',
'Summer Showers In Brindavan 2000.pdf' : 'https://www.sssbpt.info/summershowers/ss2000/ss2000.pdf',
'Summer Showers In Brindavan 2002.pdf' : 'https://www.sssbpt.info/summershowers/ss2002/ss2002.pdf',
'Sutra Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Sutra/SutraVahiniInteractive.pdf',
'Upanishad Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Upanishad/UpanishadVahiniInteractive.pdf',
'Vidya Vahini.pdf' : 'https://www.sssbpt.info/vahinis/Vidya/VidyaVahiniInteractive.pdf',
}
resp = [" I don't know.","I don't know.", "I'm sorry, I don't understand the question. Can you please provide more context or rephrase it?", "Sairam, How can I help you!", "I'm sorry, but I don't know the answer to your question.", "I am confused", "I do not know"
, "I don't know because I am an AI and I do not possess the capability to know or understand such concepts.", "Yes. I am an AI."]
if llm_response['result'] in resp :
return ans
sources_used = ' \n'.join([str(source.metadata['source'].split('/')[-1][:-4]) + "\tPage: " + str(source.metadata['page']) + "\nLink: " + str(src[source.metadata['source'].split('/')[-1]]) for source in llm_response['source_documents']])
ans = ans + '\n\nSources: \n' + sources_used
return ans
def llm_ans(query):
llm_response = chain(query)
ans = process_llm_response(llm_response)
return ans
def predict(message, history):
# output = message # debug mode
output = str(llm_ans(message))
return output
contribution_docstring = """
## An offering of love and gratitude by the II MSc Data Science and Computing Batch of 2023-24.
### Work done as part of the Deep Learning and Natural Language Processing Lab.
### Guided by Prakash PVSS
#### Links to Books: [Click Here](https://www.sssbpt.info/english/index.html)
"""
demo = gr.ChatInterface(predict,
title = f'SAI Speaks',
description = contribution_docstring )
if __name__ == "__main__":
demo.launch()