Skip to content

Commit e8b26da

Browse files
committed
Revert changes on ElasticsearchHybridRetriever
1 parent 2a1464a commit e8b26da

2 files changed

Lines changed: 3 additions & 111 deletions

File tree

integrations/elasticsearch/src/haystack_integrations/components/retrievers/elasticsearch/elasticsearch_hybrid_retriever.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from typing import TYPE_CHECKING, Any
66

7-
from haystack import Document, AsyncPipeline, default_from_dict, default_to_dict, logging, super_component
7+
from haystack import Document, Pipeline, default_from_dict, default_to_dict, logging, super_component
88
from haystack.components.embedders.types import TextEmbedder
99
from haystack.components.joiners import DocumentJoiner
1010
from haystack.components.joiners.document_joiner import JoinMode
@@ -257,7 +257,7 @@ def _create_pipeline(self, data: dict[str, Any]) -> Pipeline:
257257
bm25_retriever = ElasticsearchBM25Retriever(**data["bm25_retriever"])
258258
document_joiner = DocumentJoiner(**data["document_joiner"])
259259

260-
hybrid_retrieval = AsyncPipeline()
260+
hybrid_retrieval = Pipeline()
261261
hybrid_retrieval.add_component("text_embedder", self.embedder)
262262
hybrid_retrieval.add_component("embedding_retriever", embedding_retriever)
263263
hybrid_retrieval.add_component("bm25_retriever", bm25_retriever)

integrations/elasticsearch/tests/test_hybrid_retriever.py

Lines changed: 1 addition & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from unittest.mock import Mock, patch
88

99
import pytest
10-
from haystack import AsyncPipeline, Document, Pipeline
10+
from haystack import Document, Pipeline
1111
from haystack.components.embedders import SentenceTransformersTextEmbedder
1212
from haystack.components.joiners.document_joiner import JoinMode
1313
from haystack.core.component import component
@@ -23,12 +23,6 @@ class MockedTextEmbedder:
2323
def run(self, text: str, param_a: str = "default", param_b: str = "another_default") -> dict[str, Any]:
2424
return {"embedding": [0.1, 0.2, 0.3], "metadata": {"text": text, "param_a": param_a, "param_b": param_b}}
2525

26-
@component.output_types(embedding=list[float])
27-
async def run_async(
28-
self, text: str, param_a: str = "default", param_b: str = "another_default"
29-
) -> dict[str, Any]:
30-
return {"embedding": [0.1, 0.2, 0.3], "metadata": {"text": text, "param_a": param_a, "param_b": param_b}}
31-
3226

3327
class TestElasticsearchHybridRetriever:
3428
serialised = { # noqa: RUF012
@@ -309,105 +303,3 @@ def test_run_in_pipeline(self, mock_embedder):
309303
top_k=10,
310304
num_candidates=None,
311305
)
312-
313-
@pytest.mark.asyncio
314-
async def test_run_async(self, mock_embedder):
315-
mock_store = Mock(spec=ElasticsearchDocumentStore)
316-
mock_store._bm25_retrieval_async.return_value = [Document(content="Test doc BM25")]
317-
mock_store._embedding_retrieval_async.return_value = [Document(content="Test doc Embedding")]
318-
319-
retriever = ElasticsearchHybridRetriever(document_store=mock_store, embedder=mock_embedder)
320-
result = await retriever.run_async(query="test query")
321-
322-
assert len(result) == 1
323-
assert len(result["documents"]) == 2
324-
assert any(doc.content == "Test doc BM25" for doc in result["documents"])
325-
assert any(doc.content == "Test doc Embedding" for doc in result["documents"])
326-
327-
@pytest.mark.asyncio
328-
async def test_run_async_with_extra_arg(self, mock_embedder):
329-
mock_store = Mock(spec=ElasticsearchDocumentStore)
330-
mock_store._bm25_retrieval_async.return_value = [Document(content="Test doc BM25")]
331-
mock_store._embedding_retrieval_async.return_value = [Document(content="Test doc Embedding")]
332-
333-
retriever = ElasticsearchHybridRetriever(
334-
document_store=mock_store,
335-
embedder=mock_embedder,
336-
bm25_retriever={"filters": {"source": "bm25_init"}},
337-
embedding_retriever={"num_candidates": 42, "filters": {"source": "embedding_init"}},
338-
)
339-
result = await retriever.run_async(query="test query")
340-
341-
mock_store._bm25_retrieval_async.assert_called_once_with(
342-
query="test query",
343-
filters={"source": "bm25_init"},
344-
top_k=10,
345-
fuzziness="AUTO",
346-
scale_score=False,
347-
)
348-
mock_store._embedding_retrieval_async.assert_called_once_with(
349-
query_embedding=[0.1, 0.2, 0.3],
350-
filters={"source": "embedding_init"},
351-
top_k=10,
352-
num_candidates=42,
353-
)
354-
355-
assert len(result) == 1
356-
assert len(result["documents"]) == 2
357-
assert any(doc.content == "Test doc BM25" for doc in result["documents"])
358-
assert any(doc.content == "Test doc Embedding" for doc in result["documents"])
359-
360-
@pytest.mark.asyncio
361-
async def test_run_async_with_extra_runtime_params(self, mock_embedder):
362-
mock_store = Mock(spec=ElasticsearchDocumentStore)
363-
mock_store._bm25_retrieval_async.return_value = [Document(content="Test doc BM25")]
364-
mock_store._embedding_retrieval_async.return_value = [Document(content="Test doc Embedding")]
365-
366-
retriever = ElasticsearchHybridRetriever(document_store=mock_store, embedder=mock_embedder)
367-
await retriever.run_async(
368-
query="test query",
369-
filters_bm25={"key": "value"},
370-
filters_embedding={"key": "value"},
371-
top_k_bm25=1,
372-
top_k_embedding=1,
373-
)
374-
375-
mock_store._bm25_retrieval_async.assert_called_once_with(
376-
query="test query",
377-
filters={"key": "value"},
378-
top_k=1,
379-
fuzziness="AUTO",
380-
scale_score=False,
381-
)
382-
mock_store._embedding_retrieval_async.assert_called_once_with(
383-
query_embedding=[0.1, 0.2, 0.3],
384-
filters={"key": "value"},
385-
top_k=1,
386-
num_candidates=None,
387-
)
388-
389-
@pytest.mark.asyncio
390-
async def test_run_async_in_pipeline(self, mock_embedder):
391-
pipeline = AsyncPipeline()
392-
mock_store = Mock(spec=ElasticsearchDocumentStore)
393-
mock_store._bm25_retrieval_async.return_value = [Document(content="Test doc BM25")]
394-
mock_store._embedding_retrieval_async.return_value = [Document(content="Test doc Embedding")]
395-
396-
retriever = ElasticsearchHybridRetriever(document_store=mock_store, embedder=mock_embedder)
397-
pipeline.add_component("retriever", retriever)
398-
399-
await pipeline.run_async(data={"retriever": {"query": "test query", "filters_bm25": {"param_a": "default"}}})
400-
401-
mock_store._bm25_retrieval_async.assert_called_once_with(
402-
query="test query",
403-
filters={"param_a": "default"},
404-
top_k=10,
405-
fuzziness="AUTO",
406-
scale_score=False,
407-
)
408-
mock_store._embedding_retrieval_async.assert_called_once_with(
409-
query_embedding=[0.1, 0.2, 0.3],
410-
filters={},
411-
top_k=10,
412-
num_candidates=None,
413-
)

0 commit comments

Comments
 (0)