pac_2026 / src /load_doc.py
David JOULIN
update
aa27257
Raw
History Blame Contribute Delete
2.76 kB
import os
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_huggingface import HuggingFaceEmbeddings
from dotenv import load_dotenv
from langfuse import observe, propagate_attributes
from langchain_qdrant import QdrantVectorStore
from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams
load_dotenv()
qdrant_url = os.environ.get("QDRANT_CLUSTER_ENDPOINT")
qdrant_api_key = os.environ.get("QDRANT_API_KEY")
def extract_pdfs_from_folder(folder_path):
pdf_files = []
for file_name in os.listdir(folder_path):
if file_name.endswith(".pdf"):
pdf_files.append(os.path.join(folder_path, file_name))
extracted_texts = []
for pdf_file in pdf_files:
loader = PyPDFLoader(pdf_file)
pages = loader.load()
extracted_texts += pages
return extracted_texts
@observe()
class LoadDoc():
def __init__(self):
self.qdrant_url = qdrant_url
self.qdrant_api_key = qdrant_api_key
self.qdrant_collection_name = "pac"
self.qdrant_client = QdrantClient(
url=self.qdrant_url,
api_key=self.qdrant_api_key
)
self.data_path = "./data/"
self.model_name = "BAAI/bge-large-en"
self.model_kwargs = {'device': 'cpu'}
self.encode_kwargs = {'normalize_embeddings': False}
def load_data_into_quadrant(self):
if not self.qdrant_client.collection_exists(self.qdrant_collection_name):
self.qdrant_client.create_collection(
collection_name=self.qdrant_collection_name,
vectors_config=VectorParams(size=1024, distance=Distance.COSINE),
)
count_req = self.qdrant_client.count(
collection_name=self.qdrant_collection_name,
exact=True,
)
if count_req.count == 0:
# step 1
data = extract_pdfs_from_folder(self.data_path)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=50)
texts = text_splitter.split_documents(data)
# step 2
embeddings = HuggingFaceEmbeddings(
model_name=self.model_name,
model_kwargs=self.model_kwargs,
encode_kwargs=self.encode_kwargs
)
# step 3
qdrant = QdrantVectorStore.from_documents(
texts,
embeddings,
url=self.qdrant_url,
prefer_grpc=True,
api_key=self.qdrant_api_key,
collection_name=self.qdrant_collection_name,
force_recreate=True
)