import uuid import os from dotenv import load_dotenv from src.ingestion import ingestion_and_chunking from langchain_qdrant import QdrantVectorStore, RetrievalMode, FastEmbedSparse from langchain_huggingface import HuggingFaceEmbeddings load_dotenv() qdrant_api_key = os.getenv("QDRANT_API_KEY") qdrant_url = os.getenv("QDRANT_URL") dense_embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") sparse_embeddings = FastEmbedSparse(model_name="Qdrant/bm25") def upload_file(file_bytes: bytes, filename: str, user_id: str, collection_name: str = "pdf_rag"): docs = ingestion_and_chunking(file_bytes, filename) file_id = str(uuid.uuid4()) for doc in docs: doc.metadata["user_id"] = user_id doc.metadata["file_id"] = file_id vector_store = QdrantVectorStore.from_documents( docs, embedding=dense_embeddings, sparse_embedding=sparse_embeddings, url=qdrant_url, api_key=qdrant_api_key, collection_name=collection_name, retrieval_mode=RetrievalMode.HYBRID, vector_name="dense", sparse_vector_name="sparse", ) try: vector_store.client.create_payload_index( collection_name=collection_name, field_name="metadata.user_id", field_schema="keyword", ) except Exception: print("Failed") return vector_store