CoolFace
Apppublic

jaynopponep/LinuxGPT

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
init_db.py86 linesDownload Raw Back to root
1from langchain_community.document_loaders import PyPDFLoader, PyPDFDirectoryLoader2from langchain_chroma import Chroma3from langchain.schema import Document4from langchain_openai import OpenAIEmbeddings5from langchain.text_splitter import RecursiveCharacterTextSplitter6from dotenv import load_dotenv7import os8import shutil9 10load_dotenv()11OPEN_AI_KEY = os.getenv('OPEN_AI_KEY')12 13CHROMA_PATH = "chroma"14DATA_PATH = "data/"15TEST_PATH = "data/theory_of_computation.pdf"16 17embed = OpenAIEmbeddings(18    api_key=OPEN_AI_KEY,19    model="text-embedding-3-large"20)21 22 23def main():24    generate_data_store()25    # print(load_documents())26 27 28def generate_data_store():29    documents = load_documents()30    chunks = split_text(documents)31    save_to_chroma(chunks)32 33 34def load_documents():35    loader = PyPDFDirectoryLoader(DATA_PATH)36    docs = loader.load()37    print(docs[0].metadata)38    return docs39 40    # loader = PyPDFLoader(TEST_PATH)41    # docs = []42    # docs_lazy = loader.load()43    # for doc in docs_lazy:44    #     docs.append(doc)45    # return docs_lazy46 47 48def split_text(documents: list[Document]):49    # chunk_size = 1000,50    # chunk_overlap = 200,51    # length_function = len,52    # add_start_index = True,53    text_splitter = RecursiveCharacterTextSplitter(54        chunk_size=1100,55        chunk_overlap=100,56        length_function=len,57    )58    chunks = text_splitter.split_documents(documents)59    print(f"Split {len(documents)} documents into {len(chunks)} chunks.")60    document = chunks[10]61    print(document.page_content)62    print(document.metadata)63    return chunks64 65 66def save_to_chroma(chunks: list[Document]):67    if os.path.exists(CHROMA_PATH):  # clear out the DB first68        shutil.rmtree(CHROMA_PATH)69 70    db = Chroma(71        collection_name="linux_funds",72        embedding_function=embed,73        persist_directory=CHROMA_PATH74    )75 76    # below breaks text & metadata down to Chroma vector store77    texts = [chunk.page_content for chunk in chunks]78    metadatas = [chunk.metadata for chunk in chunks]79    db.add_texts(texts=texts, metadatas=metadatas)80    print(f"Saved {len(chunks)} chunks to CHROMA PATH {CHROMA_PATH}.")81 82 83if __name__ == "__main__":84    main()85 86