From 57a129d1ba230419d69f1d007af4b1575e2f9d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AD=D0=BC=D0=B8=D0=BB=D1=8C=20=D0=90=D0=BC=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Thu, 28 May 2026 16:40:00 +0000 Subject: [PATCH] add vectorstore.py --- vectorstore.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 vectorstore.py diff --git a/vectorstore.py b/vectorstore.py new file mode 100644 index 0000000..b68ea1b --- /dev/null +++ b/vectorstore.py @@ -0,0 +1,45 @@ +import os +from langchain_chroma import Chroma +from langchain_ollama import OllamaEmbeddings +from langchain_text_splitters import RecursiveCharacterTextSplitter +from langchain_community.document_loaders import TextLoader, DirectoryLoader + + +def create_vectorstore(persist_directory: str = "./chroma_db"): + """Create a ChromaDB vectorstore with Ollama embeddings.""" + embeddings = OllamaEmbeddings(model="nomic-embed-text") + vectorstore = Chroma( + persist_directory=persist_directory, + embedding_function=embeddings + ) + return vectorstore + + +def load_documents(directory: str, vectorstore: Chroma): + """Load documents from directory, chunk them, and add to vectorstore.""" + # Load all .txt and .md files from directory + loader = DirectoryLoader( + directory, + glob="**/*.{txt,md}", + loader_cls=TextLoader, + loader_kwargs={"encoding": "utf-8"} + ) + documents = loader.load() + + # Chunk documents + text_splitter = RecursiveCharacterTextSplitter( + chunk_size=1000, + chunk_overlap=200, + length_function=len, + is_separator_regex=False + ) + chunks = text_splitter.split_documents(documents) + + # Add to vectorstore + if chunks: + vectorstore.add_documents(chunks) + print(f"Loaded {len(chunks)} chunks from {len(documents)} documents") + else: + print("No documents found to load") + + return vectorstore \ No newline at end of file