parvezalmuqtadir commited on
Commit
c8659cf
1 Parent(s): 28a88b6

Create pdfquery.py

Browse files
Files changed (1) hide show
  1. pdfquery.py +39 -0
pdfquery.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from langchain.embeddings.openai import OpenAIEmbeddings
3
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
4
+ from langchain.vectorstores import Chroma
5
+ from langchain.document_loaders import PyPDFium2Loader
6
+ from langchain.chains.question_answering import load_qa_chain
7
+ # from langchain.llms import OpenAI
8
+ from langchain.chat_models import ChatOpenAI
9
+
10
+
11
+ class PDFQuery:
12
+ def __init__(self, openai_api_key = None) -> None:
13
+ self.embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
14
+ os.environ["OPENAI_API_KEY"] = openai_api_key
15
+ self.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
16
+ # self.llm = OpenAI(temperature=0, openai_api_key=openai_api_key)
17
+ self.llm = ChatOpenAI(temperature=0, openai_api_key=openai_api_key)
18
+ self.chain = None
19
+ self.db = None
20
+
21
+ def ask(self, question: str) -> str:
22
+ if self.chain is None:
23
+ response = "Please, add a document."
24
+ else:
25
+ docs = self.db.get_relevant_documents(question)
26
+ response = self.chain.run(input_documents=docs, question=question)
27
+ return response
28
+
29
+ def ingest(self, file_path: os.PathLike) -> None:
30
+ loader = PyPDFium2Loader(file_path)
31
+ documents = loader.load()
32
+ splitted_documents = self.text_splitter.split_documents(documents)
33
+ self.db = Chroma.from_documents(splitted_documents, self.embeddings).as_retriever()
34
+ # self.chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
35
+ self.chain = load_qa_chain(ChatOpenAI(temperature=0), chain_type="stuff")
36
+
37
+ def forget(self) -> None:
38
+ self.db = None
39
+ self.chain = None