| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  | import pytest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  | from haystack.pipelines import TranslationWrapperPipeline, ExtractiveQAPipeline | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-30 19:26:34 +01:00
										 |  |  | from haystack.schema import Answer | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.mark.slow | 
					
						
							|  |  |  | @pytest.mark.parametrize("retriever_with_docs", ["tfidf"], indirect=True) | 
					
						
							|  |  |  | def test_extractive_qa_answers(reader, retriever_with_docs, document_store_with_docs): | 
					
						
							|  |  |  |     pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever_with_docs) | 
					
						
							| 
									
										
										
										
											2022-03-07 19:25:33 +01:00
										 |  |  |     prediction = pipeline.run(query="Who lives in Berlin?", params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 3}}) | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  |     assert prediction is not None | 
					
						
							|  |  |  |     assert type(prediction["answers"][0]) == Answer | 
					
						
							|  |  |  |     assert prediction["query"] == "Who lives in Berlin?" | 
					
						
							|  |  |  |     assert prediction["answers"][0].answer == "Carla" | 
					
						
							|  |  |  |     assert prediction["answers"][0].score <= 1 | 
					
						
							|  |  |  |     assert prediction["answers"][0].score >= 0 | 
					
						
							|  |  |  |     assert prediction["answers"][0].meta["meta_field"] == "test1" | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  |     assert prediction["answers"][0].context == "My name is Carla and I live in Berlin" | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     assert len(prediction["answers"]) == 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.mark.slow | 
					
						
							|  |  |  | @pytest.mark.parametrize("retriever_with_docs", ["tfidf"], indirect=True) | 
					
						
							|  |  |  | def test_extractive_qa_answers_without_normalized_scores(reader_without_normalized_scores, retriever_with_docs): | 
					
						
							|  |  |  |     pipeline = ExtractiveQAPipeline(reader=reader_without_normalized_scores, retriever=retriever_with_docs) | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  |     prediction = pipeline.run(query="Who lives in Berlin?", params={"Reader": {"top_k": 3}}) | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  |     assert prediction is not None | 
					
						
							|  |  |  |     assert prediction["query"] == "Who lives in Berlin?" | 
					
						
							|  |  |  |     assert prediction["answers"][0].answer == "Carla" | 
					
						
							|  |  |  |     assert prediction["answers"][0].score <= 11 | 
					
						
							|  |  |  |     assert prediction["answers"][0].score >= 10 | 
					
						
							|  |  |  |     assert prediction["answers"][0].meta["meta_field"] == "test1" | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  |     assert prediction["answers"][0].context == "My name is Carla and I live in Berlin" | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     assert len(prediction["answers"]) == 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.mark.parametrize("retriever_with_docs", ["tfidf"], indirect=True) | 
					
						
							|  |  |  | def test_extractive_qa_offsets(reader, retriever_with_docs): | 
					
						
							|  |  |  |     pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever_with_docs) | 
					
						
							|  |  |  |     prediction = pipeline.run(query="Who lives in Berlin?", params={"Retriever": {"top_k": 5}}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     start = prediction["answers"][0].offsets_in_context[0].start | 
					
						
							|  |  |  |     end = prediction["answers"][0].offsets_in_context[0].end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert start == 11 | 
					
						
							|  |  |  |     assert end == 16 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  |     assert prediction["answers"][0].context[start:end] == prediction["answers"][0].answer | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.mark.slow | 
					
						
							|  |  |  | @pytest.mark.parametrize("retriever_with_docs", ["tfidf"], indirect=True) | 
					
						
							|  |  |  | def test_extractive_qa_answers_single_result(reader, retriever_with_docs): | 
					
						
							|  |  |  |     pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever_with_docs) | 
					
						
							|  |  |  |     query = "testing finder" | 
					
						
							| 
									
										
										
										
											2021-10-19 15:22:44 +02:00
										 |  |  |     prediction = pipeline.run(query=query, params={"Retriever": {"top_k": 1}, "Reader": {"top_k": 1}}) | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  |     assert prediction is not None | 
					
						
							|  |  |  |     assert len(prediction["answers"]) == 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.mark.slow | 
					
						
							|  |  |  | @pytest.mark.parametrize("retriever_with_docs", ["tfidf"], indirect=True) | 
					
						
							| 
									
										
										
										
											2022-05-12 12:34:11 +02:00
										 |  |  | @pytest.mark.parametrize("reader", ["farm"], indirect=True) | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  | def test_extractive_qa_answers_with_translator(reader, retriever_with_docs, en_to_de_translator, de_to_en_translator): | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  |     base_pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever_with_docs) | 
					
						
							|  |  |  |     pipeline = TranslationWrapperPipeline( | 
					
						
							| 
									
										
										
										
											2022-03-07 19:25:33 +01:00
										 |  |  |         input_translator=de_to_en_translator, output_translator=en_to_de_translator, pipeline=base_pipeline | 
					
						
							| 
									
										
										
										
											2021-10-15 15:37:46 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     prediction = pipeline.run(query="Wer lebt in Berlin?", params={"Reader": {"top_k": 3}}) | 
					
						
							|  |  |  |     assert prediction is not None | 
					
						
							|  |  |  |     assert prediction["query"] == "Wer lebt in Berlin?" | 
					
						
							|  |  |  |     assert "Carla" in prediction["answers"][0].answer | 
					
						
							|  |  |  |     assert prediction["answers"][0].score <= 1 | 
					
						
							|  |  |  |     assert prediction["answers"][0].score >= 0 | 
					
						
							|  |  |  |     assert prediction["answers"][0].meta["meta_field"] == "test1" | 
					
						
							| 
									
										
										
										
											2022-02-03 13:43:18 +01:00
										 |  |  |     assert prediction["answers"][0].context == "My name is Carla and I live in Berlin" |