Spaces:
Configuration error
Configuration error
File size: 2,285 Bytes
f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 f4d7f2b cd7bbf0 | 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 | import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from dotenv import load_dotenv
from langchain_groq import ChatGroq
from langchain import hub
from langchain_chroma import Chroma
from langchain_community.document_loaders import PyPDFLoader, DirectoryLoader
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
model_name = "BAAI/bge-small-en"
model_kwargs = {"device": "cpu"}
encode_kwargs = {"normalize_embeddings": True}
embeddings = HuggingFaceEmbeddings()
load_dotenv()
os.environ["LANGCHAIN_TRACING_V2"] = "true"
llm = ChatGroq(model="llama3-8b-8192")
def directory_reader():
# docs = DirectoryLoader(
# path="./data/files",
# silent_errors=True,
# show_progress=True, #TODO: change to False
# # use_multithreading=True,
# ).load()
if os.path.exists("./chroma_db"):
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)
else:
docs = []
splits = []
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
for file in os.listdir("./data/files"):
if file.endswith(".pdf"):
doc = PyPDFLoader(file_path=f"./data/files/{file}").load()
split = text_splitter.split_documents(doc)
docs.append(doc)
splits.extend(split)
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
# persist_directory="./chroma_db",
)
retriever = vectorstore.as_retriever()
prompt = hub.pull("rlm/rag-prompt")
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
response = rag_chain.invoke("Summarize the abstract of AI For climate action paper")
print(response)
if __name__ == "__main__":
directory_reader() |