from qdrant_client import AsyncQdrantClient, models from qdrant_client.models import PointStruct from typing import Dict, Any class CollectionHandler: def __init__(self, collection_name: str, vector: Any, vector_size: int, payload: Dict, id: int): self.collection_name = collection_name self.vector = vector self.vector_size = vector_size self.payload = payload self.id = id self.client = AsyncQdrantClient("localhost", port=6333) async def create_collection(self): try: if await self.client.collection_exists(self.collection_name): return {"message": "Collection already exists"} await self.client.create_collection( collection_name=self.collection_name, vectors_config=models.VectorParams(size=self.vector_size, distance=models.Distance.COSINE), optimizers_config=models.OptimizersConfigDiff(indexing_threshold=20000) ) # Creating payload indexes as per project logic await self.client.create_payload_index( collection_name=self.collection_name, field_name="Product_ID", field_schema=models.PayloadSchemaType.KEYWORD ) await self.client.create_payload_index( collection_name=self.collection_name, field_name="Product_Link", field_schema=models.PayloadSchemaType.KEYWORD ) return {"message": f"Collection {self.collection_name} created successfully"} except Exception as e: return {"message": str(e)} async def insertion(self): try: await self.client.upsert( collection_name=self.collection_name, points=[ PointStruct(id=self.id, vector=self.vector, payload=self.payload) ] ) print("Data inserted successfully") return True except Exception as e: print("Insertion failed: ", e) return False async def upsert_point(self): return await self.insertion() async def search(self, query_vector): try: result = await self.client.search( collection_name=self.collection_name, query_vector=query_vector, limit=10 ) return result except Exception as e: print("Search failed: ", e) return None async def update_collection(self): """Update is implemented as an upsert of the point data.""" return await self.upsert_point() async def delete_collection(self): try: await self.client.delete_collection(collection_name=self.collection_name) return {"message": f"Collection {self.collection_name} deleted successfully"} except Exception as e: return {"message": str(e)}