langchat-backend / qdrant_search.py
Tanmay09516's picture
backend for LangChat
9408cb5 verified
# qdrant_search.py
from typing import List, Dict
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
from qdrant_client import QdrantClient
class QdrantSearch:
def __init__(self, qdrant_url: str, api_key: str, embeddings):
self.embeddings=embeddings
# Initialize Qdrant client
self.client = QdrantClient(
url=qdrant_url,
api_key=api_key,
)
def query_qdrant(self, query: str, collection_name: str, limit: int = 5) -> List:
"""Retrieve relevant documents from Qdrant."""
query_vector = self.embeddings.get_embeddings(query)
results = self.client.search(
collection_name=collection_name,
query_vector=query_vector,
limit=limit
)
return results
def query_multiple_collections(self, query: str, collection_names: List[str], limit: int = 5) -> List[Dict]:
"""Query multiple Qdrant collections and return combined top results."""
all_results = []
for collection_name in collection_names:
results = self.query_qdrant(query, collection_name, limit)
for result in results:
all_results.append({
'text': result.payload['text'],
'source': result.payload['source'],
'score': result.score
})
return sorted(all_results, key=lambda x: x['score'], reverse=True)[:limit]