-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp2.py
81 lines (59 loc) · 2.7 KB
/
app2.py
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
import streamlit as st
import os
from langchain_groq import ChatGroq
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import PyPDFDirectoryLoader
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from dotenv import load_dotenv
import os
load_dotenv()
CURRENT_THEME = "blue"
IS_DARK_THEME = True
## load the GROQ And OpenAI API KEY
groq_api_key=os.getenv('GROQ_API_KEY')
os.environ["GOOGLE_API_KEY"]=os.getenv("GOOGLE_API_KEY")
st.title("Chai with Lord Krishna")
llm=ChatGroq(groq_api_key=groq_api_key,
model_name="llama-3.1-70b-versatile")
prompt=ChatPromptTemplate.from_template(
"""
You are Lord Krishna. Lord Krishna will answer the questions based on the given context.
You will also give the source of the sanskrit text from which you have taken the answer.
You are given the following context from the document.
<context>
{context}
<context>
Questions:{input}
"""
)
def vector_embedding():
if "vectors" not in st.session_state:
st.session_state.embeddings=GoogleGenerativeAIEmbeddings(model = "models/embedding-001")
st.session_state.loader=PyPDFDirectoryLoader("./BhagwadGeeta") ## Data Ingestion
st.session_state.docs=st.session_state.loader.load() ## Document Loading
st.session_state.text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200) ## Chunk Creation
st.session_state.final_documents=st.session_state.text_splitter.split_documents(st.session_state.docs[:20]) #splitting
st.session_state.vectors=FAISS.from_documents(st.session_state.final_documents,st.session_state.embeddings) #vector OpenAI embeddings
prompt1=st.text_input("First Prepare Chai, then enter your question")
if st.button("Prepare Chai"):
vector_embedding()
st.write("Your chai is ready, ask anything!")
import time
if prompt1:
document_chain=create_stuff_documents_chain(llm,prompt)
retriever=st.session_state.vectors.as_retriever()
retrieval_chain=create_retrieval_chain(retriever,document_chain)
start=time.process_time()
response=retrieval_chain.invoke({'input':prompt1})
print("Response time :",time.process_time()-start)
st.write(response['answer'])
# With a streamlit expander
with st.expander("Document Similarity Search"):
# Find the relevant chunks
for i, doc in enumerate(response["context"]):
st.write(doc.page_content)
st.write("--------------------------------")