33from typing import List , Optional
44from langchain .schema .document import Document
55from langchain_qdrant import QdrantVectorStore
6+ from qdrant_client import QdrantClient
7+ from qdrant_client .models import Distance , VectorParams
68from langchain_community .document_loaders import WebBaseLoader
79from langchain .chat_models import init_chat_model
810from langchain_core .vectorstores .base import VectorStoreRetriever
@@ -59,7 +61,7 @@ def load_vector_store(
5961 qdrant_url : str = QDRANT_URL ,
6062 embedding_model_name : str = EMBEDDING_MODEL
6163) -> Optional [QdrantVectorStore ]:
62- """Load the vector store from the specified collection."""
64+ """Load the vector store from the specified collection, creating it if it doesn't exist ."""
6365 logger .info ("Loading vector store: collection=%s, url=%s, embedding_model=%s" ,
6466 collection_name , qdrant_url , embedding_model_name )
6567
@@ -68,20 +70,61 @@ def load_vector_store(
6870 return None
6971
7072 embeddings = init_embeddings_wrapper (embedding_model_name )
71-
7273
7374 try :
75+ # First, try to connect to existing collection
7476 vector_store = QdrantVectorStore .from_existing_collection (
7577 embedding = embeddings ,# type: ignore
7678 collection_name = collection_name ,
7779 url = qdrant_url ,
7880 prefer_grpc = True ,
7981 )
80- logger .info ("Vector store loaded successfully" )
82+ logger .info ("Vector store loaded successfully from existing collection " )
8183 return vector_store
8284 except Exception as e :
83- logger .error (f"Failed to load vector store: { e } " )
84- return None
85+ logger .warning (f"Failed to load existing collection '{ collection_name } ': { e } " )
86+ logger .info ("Attempting to create new collection..." )
87+
88+ try :
89+ # Create a Qdrant client to check/create collection
90+ client = QdrantClient (url = qdrant_url , prefer_grpc = True )
91+
92+ # Check if collection exists
93+ collections = client .get_collections ()
94+ collection_exists = any (col .name == collection_name for col in collections .collections )
95+
96+ if not collection_exists :
97+ logger .info (f"Collection '{ collection_name } ' does not exist. Creating it..." )
98+
99+ # Get embedding dimension from the embeddings model
100+ sample_embedding = embeddings .embed_query ("sample text" )
101+ vector_size = len (sample_embedding )
102+
103+ # Create collection with vector parameters
104+ client .create_collection (
105+ collection_name = collection_name ,
106+ vectors_config = VectorParams (
107+ size = vector_size ,
108+ distance = Distance .COSINE
109+ )
110+ )
111+ logger .info (f"Collection '{ collection_name } ' created successfully with vector size { vector_size } " )
112+ else :
113+ logger .info (f"Collection '{ collection_name } ' already exists" )
114+
115+ # Now create vector store from the collection (existing or newly created)
116+ vector_store = QdrantVectorStore .from_existing_collection (
117+ embedding = embeddings ,# type: ignore
118+ collection_name = collection_name ,
119+ url = qdrant_url ,
120+ prefer_grpc = True ,
121+ )
122+ logger .info ("Vector store loaded successfully after collection creation/verification" )
123+ return vector_store
124+
125+ except Exception as create_error :
126+ logger .error (f"Failed to create/load collection '{ collection_name } ': { create_error } " )
127+ return None
85128
86129
87130def build_retriever (
0 commit comments