from langchain_community.document_loaders import PyPDFLoader, DirectoryLoader # from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_pinecone import PineconeVectorStore from langchain_huggingface import HuggingFaceEmbeddings from langchain_core.documents import Document from typing import List # Extract text from PDF files def load_pdf_files(data): loader = DirectoryLoader( data, glob="*.pdf", loader_cls=PyPDFLoader ) documents = loader.load() return documents # Keep only minimal metadata (source) def filter_to_minimal_docs(docs: List[Document]) -> List[Document]: """ Given a list of Document objects, return a new list containing only 'source' metadata and original page content. """ minimal_docs: List[Document] = [] for doc in docs: src = doc.metadata.get("source") minimal_docs.append( Document( page_content=doc.page_content, metadata={"source": src} ) ) return minimal_docs # Split documents into smaller chunks def text_split(minimal_docs): text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=20, ) texts_chunk = text_splitter.split_documents(minimal_docs) return texts_chunk # Download HuggingFace embedding model def download_hugging_face_embeddings(): model_name = "sentence-transformers/all-MiniLM-L6-v2" embeddings = HuggingFaceEmbeddings( model_name=model_name ) return embeddings