From 3e3d48d732eb4bd6bb92259ae80be3c2e7ccc128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=B8=D0=BD=D0=B0=D1=80=20=D0=9C=D0=B8=D1=80=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=D1=82=D0=BE=D0=B2?= Date: Thu, 18 Jun 2026 10:02:16 +0000 Subject: [PATCH] Solution compiled successfully. Ready to publish.: update src/utils.py --- src/utils.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/utils.py b/src/utils.py index 560c085..38b9f6d 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1,19 +1,20 @@ -import os import pathlib from typing import List from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter -from langchain_chroma import Chroma +from langchain_qdrant import QdrantVectorStore from langchain_ollama import OllamaEmbeddings -CHROMA_PATH = pathlib.Path("./chroma_faq") -CHROMA_PATH.mkdir(parents=True, exist_ok=True) +# Qdrant collection name +COLLECTION_NAME = "faq" +# Qdrant server URL (default local) +QDRANT_URL = "http://localhost:6333" -def load_faq_to_chroma(md_dir: str = "data") -> None: - """Load all .md files from md_dir into a Chroma vector store. - The store is persisted at CHROMA_PATH. +def load_faq_to_qdrant(md_dir: str = "data") -> None: + """Load all .md files from md_dir into a Qdrant vector store. + The store is created/updated at COLLECTION_NAME. """ loader = TextLoader all_docs = [] @@ -24,12 +25,22 @@ def load_faq_to_chroma(md_dir: str = "data") -> None: splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) docs = splitter.split_documents(all_docs) embeddings = OllamaEmbeddings(model="nomic-embed-text") - Chroma.from_documents(docs, embeddings, persist_directory=str(CHROMA_PATH)) + # Create or update Qdrant collection + QdrantVectorStore.from_documents( + docs, + embeddings, + collection_name=COLLECTION_NAME, + url=QDRANT_URL, + ) def search_course_docs(query: str, k: int = 3) -> List[str]: - """Return top k document snippets from the persisted Chroma store.""" + """Return top k document snippets from the persisted Qdrant store.""" embeddings = OllamaEmbeddings(model="nomic-embed-text") - chroma = Chroma(persist_directory=str(CHROMA_PATH), embedding_function=embeddings) - results = chroma.similarity_search(query, k=k) + store = QdrantVectorStore( + collection_name=COLLECTION_NAME, + url=QDRANT_URL, + embedding_function=embeddings, + ) + results = store.similarity_search(query, k=k) return [doc.page_content for doc in results]