Turbiling commited on
Commit
03cac65
·
verified ·
1 Parent(s): 459d768

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -29
app.py CHANGED
@@ -1,42 +1,44 @@
1
  import os
2
  import chainlit as cl
 
 
 
3
  from langchain_community.document_loaders import PyPDFLoader
4
- from langchain.text_splitter import CharacterTextSplitter
5
- from langchain.vectorstores.faiss import FAISS
6
- from langchain.embeddings import HuggingFaceEmbeddings
7
- from langchain.chains import RetrievalQA
8
- from langchain_community.llms import Groq
9
 
10
- # Load your API key
11
- os.environ["GROQ_API_KEY"] = os.getenv("GROQ_API_KEY") or "your-groq-api-key" # Replace with actual key if needed
12
 
13
- # Initialize the LLM
14
- llm = Groq(model="llama3-8b-8192")
15
-
16
- # Load and split PDF (do this only once — in real apps, optimize this with caching)
17
- def load_pdf_and_create_retriever():
18
- loader = PyPDFLoader("document.pdf") # Make sure document.pdf is in the same folder
19
- documents = loader.load()
20
 
21
- text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
22
- docs = text_splitter.split_documents(documents)
 
23
 
 
24
  embeddings = HuggingFaceEmbeddings()
25
- db = FAISS.from_documents(docs, embeddings)
26
- retriever = db.as_retriever()
27
- return retriever
 
 
28
 
29
- # Create the retriever once
30
- retriever = load_pdf_and_create_retriever()
 
 
 
31
 
32
- # Create Retrieval-QA chain
33
- qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
 
34
 
35
- # Chainlit callback
36
- @cl.on_message
37
- async def handle_message(message: cl.Message):
38
- query = message.content
39
- result = qa_chain.run(query)
40
- await cl.Message(content=result).send()
41
 
42
 
 
1
  import os
2
  import chainlit as cl
3
+ from langchain_community.vectorstores import FAISS
4
+ from langchain_community.embeddings import HuggingFaceEmbeddings
5
+ from langchain_groq import ChatGroq
6
  from langchain_community.document_loaders import PyPDFLoader
7
+ from langchain_text_splitters import RecursiveCharacterTextSplitter
8
+ from langchain.chains.question_answering import load_qa_chain
9
+ from langchain_community.llms import HuggingFaceHub
10
+ from dotenv import load_dotenv
 
11
 
12
+ load_dotenv()
 
13
 
14
+ @cl.on_message
15
+ async def main(message: cl.Message):
16
+ # Load PDF
17
+ loader = PyPDFLoader("document.pdf")
18
+ pages = loader.load_and_split()
 
 
19
 
20
+ # Split text
21
+ text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
22
+ documents = text_splitter.split_documents(pages)
23
 
24
+ # Embeddings & Vector DB
25
  embeddings = HuggingFaceEmbeddings()
26
+ vectorstore = FAISS.from_documents(documents, embeddings)
27
+
28
+ # Get relevant docs
29
+ query = message.content
30
+ matching_docs = vectorstore.similarity_search(query)
31
 
32
+ # LLM setup
33
+ llm = ChatGroq(
34
+ api_key=os.getenv("GROQ_API_KEY"),
35
+ model_name="LLaMA3-8b-8192"
36
+ )
37
 
38
+ # QA chain
39
+ chain = load_qa_chain(llm, chain_type="stuff")
40
+ answer = chain.run(input_documents=matching_docs, question=query)
41
 
42
+ await cl.Message(content=answer).send()
 
 
 
 
 
43
 
44