From 99ef75940e47e93138e4e86e6c373a0cf76df790 Mon Sep 17 00:00:00 2001 From: Evgeniya Sukhodolskaya Date: Sun, 1 Mar 2026 14:28:45 +0100 Subject: [PATCH] Fix cloud inference MRL dimensions option and bump qdrant-client --- pyproject.toml | 2 +- .../services/hybrid_service/qdrant_query.py | 10 +++++----- .../services/query_vectorstore_service/qdrant_query.py | 6 +++--- .../infrastructure/qdrant_db/qdrant_vectorstore.py | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9943099..26c0f2c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,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 9632476..ab6479f 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/application/services/query_vectorstore_service/qdrant_query.py b/src/biomedical_graphrag/application/services/query_vectorstore_service/qdrant_query.py index 642fa71..02fdb54 100644 --- a/src/biomedical_graphrag/application/services/query_vectorstore_service/qdrant_query.py +++ b/src/biomedical_graphrag/application/services/query_vectorstore_service/qdrant_query.py @@ -46,7 +46,7 @@ async def retrieve_documents_dense(self, question: str, top_k: int = 3) -> list[ List of dictionaries containing the top_k similar documents. """ if self.cloud_inference: - dense_vector = self.qdrant_client._define_openai_vectors(question, dimensions=self.embedding_dimension) + dense_vector = self.qdrant_client._define_openai_vectors(question, mrl_dimensions=self.embedding_dimension) else: dense_vector = await self.qdrant_client._get_openai_vectors(question, dimensions=self.embedding_dimension) @@ -86,10 +86,10 @@ async def retrieve_documents_hybrid(self, question: str, top_k: int = 3) -> list """ if self.cloud_inference: retriever_vector = self.qdrant_client._define_openai_vectors( - question, dimensions=self.embedding_dimension + question, mrl_dimensions=self.embedding_dimension ) reranker_vector = self.qdrant_client._define_openai_vectors( - question, dimensions=self.reranker_embedding_dimension + question, mrl_dimensions=self.reranker_embedding_dimension ) else: openai_vector = await self.qdrant_client._get_openai_vectors( diff --git a/src/biomedical_graphrag/infrastructure/qdrant_db/qdrant_vectorstore.py b/src/biomedical_graphrag/infrastructure/qdrant_db/qdrant_vectorstore.py index 47a5af0..1d69808 100644 --- a/src/biomedical_graphrag/infrastructure/qdrant_db/qdrant_vectorstore.py +++ b/src/biomedical_graphrag/infrastructure/qdrant_db/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