diff --git a/pyproject.toml b/pyproject.toml index 78ba0e6..e056d1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ dependencies = [ "openai>=1.0.0", "pydantic>=2.12.0", "pydantic-settings>=2.11.0", - "qdrant-client>=1.16.2", + "qdrant-client>=1.17.0", "uvicorn>=0.34.0", ] diff --git a/src/biomedical_graphrag/application/services/hybrid_service/qdrant_query.py b/src/biomedical_graphrag/application/services/hybrid_service/qdrant_query.py index dbce3f1..aeeb47e 100644 --- a/src/biomedical_graphrag/application/services/hybrid_service/qdrant_query.py +++ b/src/biomedical_graphrag/application/services/hybrid_service/qdrant_query.py @@ -32,7 +32,7 @@ async def retrieve_papers_dense(self, query: str, top_k: int = 5) -> list[dict]: """ if self.qdrant_client.cloud_inference: dense_vector = self.qdrant_client._define_openai_vectors( - query, dimensions=self.qdrant_client.embedding_dimension + query, mrl_dimensions=self.qdrant_client.embedding_dimension ) else: dense_vector = await self.qdrant_client._get_openai_vectors( @@ -76,10 +76,10 @@ async def retrieve_papers_hybrid(self, query: str, top_k: int = 5) -> list[dict] """ if self.qdrant_client.cloud_inference: retriever_vector = self.qdrant_client._define_openai_vectors( - query, dimensions=self.qdrant_client.embedding_dimension + query, mrl_dimensions=self.qdrant_client.embedding_dimension ) reranker_vector = self.qdrant_client._define_openai_vectors( - query, dimensions=self.qdrant_client.reranker_embedding_dimension + query, mrl_dimensions=self.qdrant_client.reranker_embedding_dimension ) else: openai_vector = await self.qdrant_client._get_openai_vectors( @@ -152,7 +152,7 @@ async def recommend_papers_based_on_constraints( if positive_examples: positive_vectors = [ self.qdrant_client._define_openai_vectors( - pos_example, dimensions=self.qdrant_client.embedding_dimension + pos_example, mrl_dimensions=self.qdrant_client.embedding_dimension ) for pos_example in positive_examples ] @@ -161,7 +161,7 @@ async def recommend_papers_based_on_constraints( if negative_examples: negative_vectors = [ self.qdrant_client._define_openai_vectors( - neg_example, dimensions=self.qdrant_client.embedding_dimension + neg_example, mrl_dimensions=self.qdrant_client.embedding_dimension ) for neg_example in negative_examples ] diff --git a/src/biomedical_graphrag/infrastructure/qdrant_engine/qdrant_vectorstore.py b/src/biomedical_graphrag/infrastructure/qdrant_engine/qdrant_vectorstore.py index cf586d1..de3955d 100644 --- a/src/biomedical_graphrag/infrastructure/qdrant_engine/qdrant_vectorstore.py +++ b/src/biomedical_graphrag/infrastructure/qdrant_engine/qdrant_vectorstore.py @@ -103,14 +103,14 @@ async def _get_openai_vectors(self, text: str, dimensions: int) -> list[float]: logger.error(f"❌ Failed to create embedding: {e}") raise - def _define_openai_vectors(self, text: str, dimensions: int = 1536) -> models.Document: + def _define_openai_vectors(self, text: str, mrl_dimensions: int = 1536) -> models.Document: """ Wrap text in models.Document to handle OpenAI embeddings inference through Qdrant's Cloud. Args: text (str): Input text. - dimensions (int): Number of dimensions for the embedding. https://platform.openai.com/docs/api-reference/embeddings/create#embeddings-create-dimensions + mrl_dimensions (int): Number of MRL dimensions for the embedding. https://platform.openai.com/docs/api-reference/embeddings/create#embeddings-create-dimensions Returns: models.Document: Document object. """ @@ -119,7 +119,7 @@ def _define_openai_vectors(self, text: str, dimensions: int = 1536) -> models.Do model=f"openai/{settings.qdrant.embedding_model}", options={ "openai-api-key": settings.openai.api_key.get_secret_value(), - "dimensions": dimensions, + "mrl": mrl_dimensions, }, ) @@ -243,10 +243,10 @@ async def upsert_points( if self.cloud_inference: retriever_vector = self._define_openai_vectors( - abstract, dimensions=self.embedding_dimension + abstract, mrl_dimensions=self.embedding_dimension ) reranker_vector = self._define_openai_vectors( - abstract, dimensions=self.reranker_embedding_dimension + abstract, mrl_dimensions=self.reranker_embedding_dimension ) else: openai_vector = await self._get_openai_vectors(abstract, dimensions=self.reranker_embedding_dimension) # MRL, https://platform.openai.com/docs/guides/embeddings#use-cases