haystack/test/nodes/test_translator.py

116 lines
3.3 KiB
Python
Raw Normal View History

import pytest
import haystack
Refactoring of the `haystack` package (#1624) * Files moved, imports all broken * Fix most imports and docstrings into * Fix the paths to the modules in the API docs * Add latest docstring and tutorial changes * Add a few pipelines that were lost in the inports * Fix a bunch of mypy warnings * Add latest docstring and tutorial changes * Create a file_classifier module * Add docs for file_classifier * Fixed most circular imports, now the REST API can start * Add latest docstring and tutorial changes * Tackling more mypy issues * Reintroduce from FARM and fix last mypy issues hopefully * Re-enable old-style imports * Fix some more import from the top-level package in an attempt to sort out circular imports * Fix some imports in tests to new-style to prevent failed class equalities from breaking tests * Change document_store into document_stores * Update imports in tutorials * Add latest docstring and tutorial changes * Probably fixes summarizer tests * Improve the old-style import allowing module imports (should work) * Try to fix the docs * Remove dedicated KnowledgeGraph page from autodocs * Remove dedicated GraphRetriever page from autodocs * Fix generate_docstrings.sh with an updated list of yaml files to look for * Fix some more modules in the docs * Fix the document stores docs too * Fix a small issue on Tutorial14 * Add latest docstring and tutorial changes * Add deprecation warning to old-style imports * Remove stray folder and import Dict into dense.py * Change import path for MLFlowLogger * Add old loggers path to the import path aliases * Fix debug output of convert_ipynb.py * Fix circular import on BaseRetriever * Missed one merge block * re-run tutorial 5 * Fix imports in tutorial 5 * Re-enable squad_to_dpr CLI from the root package and move get_batches_from_generator into document_stores.base * Add latest docstring and tutorial changes * Fix typo in utils __init__ * Fix a few more imports * Fix benchmarks too * New-style imports in test_knowledge_graph * Rollback setup.py * Rollback squad_to_dpr too Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2021-10-25 15:50:23 +02:00
from haystack.schema import Document
from haystack.nodes import TransformersTranslator
ORIGINAL_TEXT = "TEST QUERY"
TRANSLATION = "MOCK TRANSLATION"
class MockTokenizer:
@classmethod
def from_pretrained(cls, *a, **k):
return cls()
def __call__(self, *a, **k):
return self
def to(self, *a, **k):
return {}
def batch_decode(self, *a, **k):
return [TRANSLATION]
class MockModel:
@classmethod
def from_pretrained(cls, *a, **k):
return cls()
def generate(self, *a, **k):
return None
def to(self, *a, **k):
return None
@pytest.fixture
def mock_models(monkeypatch):
monkeypatch.setattr(haystack.nodes.translator.transformers, "AutoModelForSeq2SeqLM", MockModel)
monkeypatch.setattr(haystack.nodes.translator.transformers, "AutoTokenizer", MockTokenizer)
@pytest.fixture
def en_to_de_translator(mock_models) -> TransformersTranslator:
return TransformersTranslator(model_name_or_path="irrelevant/anyway")
@pytest.fixture
def de_to_en_translator(mock_models) -> TransformersTranslator:
return TransformersTranslator(model_name_or_path="irrelevant/anyway")
@pytest.mark.unit
def test_translator_with_query(en_to_de_translator):
assert en_to_de_translator.translate(query=ORIGINAL_TEXT) == TRANSLATION
@pytest.mark.unit
def test_translator_with_list(en_to_de_translator):
assert en_to_de_translator.translate(documents=[ORIGINAL_TEXT])[0] == TRANSLATION
@pytest.mark.unit
def test_translator_with_document(en_to_de_translator):
assert en_to_de_translator.translate(documents=[Document(content=ORIGINAL_TEXT)])[0].content == TRANSLATION
@pytest.mark.unit
def test_translator_with_document_preserves_original(en_to_de_translator):
original_document = Document(content=ORIGINAL_TEXT)
en_to_de_translator.translate(documents=[original_document])
assert original_document.content == ORIGINAL_TEXT
@pytest.mark.unit
def test_translator_with_dictionary(en_to_de_translator):
assert en_to_de_translator.translate(documents=[{"content": ORIGINAL_TEXT}])[0]["content"] == TRANSLATION
@pytest.mark.unit
def test_translator_with_dictionary_preserves_original(en_to_de_translator):
original_document = {"content": ORIGINAL_TEXT}
en_to_de_translator.translate(documents=[original_document])
assert original_document["content"] == ORIGINAL_TEXT
@pytest.mark.unit
def test_translator_with_dictionary_with_dict_key(en_to_de_translator):
assert en_to_de_translator.translate(documents=[{"key": ORIGINAL_TEXT}], dict_key="key")[0]["key"] == TRANSLATION
@pytest.mark.unit
def test_translator_with_empty_original(en_to_de_translator):
with pytest.raises(AttributeError):
en_to_de_translator.translate()
@pytest.mark.unit
def test_translator_with_query_and_documents(en_to_de_translator):
with pytest.raises(AttributeError):
en_to_de_translator.translate(query=ORIGINAL_TEXT, documents=[ORIGINAL_TEXT])
@pytest.mark.unit
def test_translator_with_dict_without_text_key(en_to_de_translator):
with pytest.raises(AttributeError):
en_to_de_translator.translate(documents=[{"text1": ORIGINAL_TEXT}])
@pytest.mark.unit
def test_translator_with_dict_with_non_string_value(en_to_de_translator):
with pytest.raises(AttributeError):
en_to_de_translator.translate(documents=[{"text": 123}])