| Name | Stmts | Miss | Cover | Missing |
|---|---|---|---|---|
| haystack/__init__.py | 11 | 0 | 100% | |
| haystack/components/__init__.py | 0 | 0 | 100% | |
| haystack/components/agents/__init__.py | 5 | 0 | 100% | |
| haystack/components/agents/agent.py | 455 | 5 | 99% | 152, 220, 236, 360, 936 |
| haystack/components/agents/state/__init__.py | 5 | 0 | 100% | |
| haystack/components/agents/state/state.py | 74 | 2 | 97% | 76, 80 |
| haystack/components/agents/state/state_utils.py | 18 | 0 | 100% | |
| haystack/components/agents/tool_calling.py | 248 | 5 | 98% | 30, 247-249, 618 |
| haystack/components/agents/utils.py | 23 | 0 | 100% | |
| haystack/components/builders/__init__.py | 5 | 0 | 100% | |
| haystack/components/builders/answer_builder.py | 98 | 3 | 97% | 270, 291, 303 |
| haystack/components/builders/chat_prompt_builder.py | 110 | 2 | 98% | 179, 266 |
| haystack/components/builders/prompt_builder.py | 50 | 0 | 100% | |
| haystack/components/caching/__init__.py | 5 | 0 | 100% | |
| haystack/components/caching/cache_checker.py | 43 | 0 | 100% | |
| haystack/components/converters/__init__.py | 5 | 0 | 100% | |
| haystack/components/converters/csv.py | 88 | 4 | 95% | 161-162, 189-190 |
| haystack/components/converters/docx.py | 159 | 1 | 99% | 262 |
| haystack/components/converters/file_to_file_content.py | 32 | 0 | 100% | |
| haystack/components/converters/html.py | 50 | 0 | 100% | |
| haystack/components/converters/image/__init__.py | 5 | 0 | 100% | |
| haystack/components/converters/image/document_to_image.py | 43 | 0 | 100% | |
| haystack/components/converters/image/file_to_document.py | 27 | 1 | 96% | 94 |
| haystack/components/converters/image/file_to_image.py | 53 | 0 | 100% | |
| haystack/components/converters/image/image_utils.py | 128 | 5 | 96% | 78-82, 104, 109-110 |
| haystack/components/converters/image/pdf_to_image.py | 46 | 3 | 93% | 137-141 |
| haystack/components/converters/json.py | 91 | 11 | 88% | 228-229, 231-234, 238-239, 251-252, 283-285 |
| haystack/components/converters/markdown.py | 71 | 10 | 86% | 107, 120-122, 128-134, 152, 173-178 |
| haystack/components/converters/msg.py | 75 | 5 | 93% | 91, 165-167, 179 |
| haystack/components/converters/multi_file_converter.py | 50 | 0 | 100% | |
| haystack/components/converters/output_adapter.py | 65 | 1 | 98% | 129 |
| haystack/components/converters/pdfminer.py | 68 | 0 | 100% | |
| haystack/components/converters/pptx.py | 69 | 2 | 97% | 89-90 |
| haystack/components/converters/pypdf.py | 74 | 3 | 96% | 209-213 |
| haystack/components/converters/txt.py | 34 | 3 | 91% | 87-91 |
| haystack/components/converters/utils.py | 21 | 0 | 100% | |
| haystack/components/converters/xlsx.py | 113 | 3 | 97% | 83, 183, 185 |
| haystack/components/embedders/__init__.py | 5 | 0 | 100% | |
| haystack/components/embedders/azure_document_embedder.py | 67 | 2 | 97% | 121, 124 |
| haystack/components/embedders/azure_text_embedder.py | 61 | 2 | 97% | 107, 110 |
| haystack/components/embedders/mock_document_embedder.py | 58 | 0 | 100% | |
| haystack/components/embedders/mock_text_embedder.py | 50 | 0 | 100% | |
| haystack/components/embedders/mock_utils.py | 25 | 0 | 100% | |
| haystack/components/embedders/openai_document_embedder.py | 143 | 44 | 69% | 179, 217, 250, 272-273, 284-320, 369-390 |
| haystack/components/embedders/openai_text_embedder.py | 71 | 9 | 87% | 154, 221-223, 241-245 |
| haystack/components/embedders/types/__init__.py | 2 | 0 | 100% | |
| haystack/components/embedders/types/protocol.py | 6 | 0 | 100% | |
| haystack/components/evaluators/__init__.py | 5 | 0 | 100% | |
| haystack/components/evaluators/answer_exact_match.py | 15 | 0 | 100% | |
| haystack/components/evaluators/context_relevance.py | 50 | 0 | 100% | |
| haystack/components/evaluators/document_map.py | 46 | 4 | 91% | 73, 76-80, 126 |
| haystack/components/evaluators/document_mrr.py | 42 | 4 | 90% | 71, 74-78, 122 |
| haystack/components/evaluators/document_ndcg.py | 70 | 0 | 100% | |
| haystack/components/evaluators/document_recall.py | 73 | 2 | 97% | 109-113 |
| haystack/components/evaluators/faithfulness.py | 50 | 0 | 100% | |
| haystack/components/evaluators/llm_evaluator.py | 160 | 1 | 99% | 241 |
| haystack/components/evaluators/sas_evaluator.py | 57 | 25 | 56% | 111-125, 153-188 |
| haystack/components/extractors/__init__.py | 5 | 0 | 100% | |
| haystack/components/extractors/image/__init__.py | 5 | 0 | 100% | |
| haystack/components/extractors/image/llm_document_content_extractor.py | 155 | 1 | 99% | 323 |
| haystack/components/extractors/llm_metadata_extractor.py | 173 | 16 | 91% | 325-333, 347-355, 373-376, 419, 471 |
| haystack/components/extractors/regex_text_extractor.py | 49 | 0 | 100% | |
| haystack/components/fetchers/__init__.py | 5 | 0 | 100% | |
| haystack/components/fetchers/link_content.py | 202 | 27 | 87% | 192-200, 267, 276-283, 316-320, 409-416, 449, 482 |
| haystack/components/generators/__init__.py | 5 | 0 | 100% | |
| haystack/components/generators/chat/__init__.py | 5 | 0 | 100% | |
| haystack/components/generators/chat/azure.py | 90 | 3 | 97% | 213, 363, 366 |
| haystack/components/generators/chat/azure_responses.py | 46 | 2 | 96% | 224, 271 |
| haystack/components/generators/chat/fallback.py | 98 | 3 | 97% | 252-257 |
| haystack/components/generators/chat/llm.py | 40 | 1 | 98% | 124 |
| haystack/components/generators/chat/mock.py | 144 | 0 | 100% | |
| haystack/components/generators/chat/openai.py | 230 | 4 | 98% | 458, 509, 680, 780 |
| haystack/components/generators/chat/openai_responses.py | 358 | 34 | 91% | 278, 309, 398, 478, 494, 531, 556, 609-618, 634-635, 640, 650, 660-676, 685, 742, 839, 881-882, 895, 947, 969, 988 |
| haystack/components/generators/chat/types/__init__.py | 2 | 0 | 100% | |
| haystack/components/generators/chat/types/protocol.py | 4 | 0 | 100% | |
| haystack/components/generators/openai_image_generator.py | 78 | 0 | 100% | |
| haystack/components/generators/utils.py | 93 | 9 | 90% | 69, 83, 129, 162-163, 195, 211, 213, 215 |
| haystack/components/joiners/__init__.py | 5 | 0 | 100% | |
| haystack/components/joiners/answer_joiner.py | 49 | 1 | 98% | 140 |
| haystack/components/joiners/branch.py | 20 | 3 | 85% | 105, 116-117 |
| haystack/components/joiners/document_joiner.py | 97 | 0 | 100% | |
| haystack/components/joiners/list_joiner.py | 23 | 0 | 100% | |
| haystack/components/joiners/string_joiner.py | 8 | 0 | 100% | |
| haystack/components/preprocessors/__init__.py | 5 | 0 | 100% | |
| haystack/components/preprocessors/csv_document_cleaner.py | 64 | 0 | 100% | |
| haystack/components/preprocessors/csv_document_splitter.py | 107 | 4 | 96% | 127, 130, 141-145 |
| haystack/components/preprocessors/document_cleaner.py | 117 | 1 | 99% | 101 |
| haystack/components/preprocessors/document_preprocessor.py | 46 | 2 | 96% | 162, 197 |
| haystack/components/preprocessors/document_splitter.py | 206 | 0 | 100% | |
| haystack/components/preprocessors/embedding_based_document_splitter.py | 215 | 19 | 91% | 246, 273-282, 297-298, 316-319, 429, 469-481, 551-552 |
| haystack/components/preprocessors/hierarchical_document_splitter.py | 59 | 0 | 100% | |
| haystack/components/preprocessors/markdown_header_splitter.py | 162 | 6 | 96% | 219-220, 228, 276, 299, 354 |
| haystack/components/preprocessors/python_code_splitter.py | 290 | 15 | 95% | 150, 162, 190, 197, 231, 280, 308-310, 411-413, 415, 528, 596 |
| haystack/components/preprocessors/recursive_splitter.py | 238 | 18 | 92% | 148-151, 193-195, 236-238, 254-256, 276, 401-404 |
| haystack/components/preprocessors/sentence_tokenizer.py | 83 | 5 | 94% | 62-63, 70-75, 215 |
| haystack/components/preprocessors/text_cleaner.py | 29 | 0 | 100% | |
| haystack/components/query/__init__.py | 5 | 0 | 100% | |
| haystack/components/query/query_expander.py | 137 | 10 | 93% | 274-275, 279, 289-290, 297-303, 314-317 |
| haystack/components/rankers/__init__.py | 5 | 0 | 100% | |
| haystack/components/rankers/llm_ranker.py | 154 | 8 | 95% | 314, 317, 324-325, 349, 376, 385, 389 |
| haystack/components/rankers/lost_in_the_middle.py | 43 | 4 | 91% | 57, 83, 87, 117 |
| haystack/components/rankers/meta_field.py | 118 | 0 | 100% | |
| haystack/components/rankers/meta_field_grouping_ranker.py | 38 | 0 | 100% | |
| haystack/components/retrievers/__init__.py | 5 | 0 | 100% | |
| haystack/components/retrievers/auto_merging_retriever.py | 86 | 0 | 100% | |
| haystack/components/retrievers/filter_retriever.py | 28 | 1 | 96% | 55 |
| haystack/components/retrievers/in_memory/__init__.py | 5 | 0 | 100% | |
| haystack/components/retrievers/in_memory/bm25_retriever.py | 44 | 0 | 100% | |
| haystack/components/retrievers/in_memory/embedding_retriever.py | 49 | 1 | 98% | 102 |
| haystack/components/retrievers/multi_query_embedding_retriever.py | 77 | 2 | 97% | 193, 212 |
| haystack/components/retrievers/multi_query_text_retriever.py | 67 | 3 | 96% | 123, 169, 184 |
| haystack/components/retrievers/multi_retriever.py | 114 | 1 | 99% | 135 |
| haystack/components/retrievers/sentence_window_retriever.py | 104 | 6 | 94% | 139, 249, 269-276, 291-298 |
| haystack/components/retrievers/text_embedding_retriever.py | 52 | 0 | 100% | |
| haystack/components/retrievers/types/__init__.py | 2 | 0 | 100% | |
| haystack/components/retrievers/types/protocol.py | 5 | 0 | 100% | |
| haystack/components/routers/__init__.py | 5 | 0 | 100% | |
| haystack/components/routers/conditional_router.py | 172 | 8 | 95% | 458-459, 495, 513, 555, 573, 583, 595 |
| haystack/components/routers/document_length_router.py | 15 | 0 | 100% | |
| haystack/components/routers/document_type_router.py | 46 | 0 | 100% | |
| haystack/components/routers/file_type_router.py | 72 | 6 | 92% | 182-187 |
| haystack/components/routers/llm_messages_router.py | 87 | 1 | 99% | 192 |
| haystack/components/routers/metadata_router.py | 35 | 0 | 100% | |
| haystack/components/samplers/__init__.py | 5 | 0 | 100% | |
| haystack/components/samplers/top_p.py | 65 | 0 | 100% | |
| haystack/components/validators/__init__.py | 5 | 0 | 100% | |
| haystack/components/validators/json_schema.py | 71 | 8 | 89% | 23-24, 137, 139, 154, 242, 248, 252 |
| haystack/components/writers/__init__.py | 5 | 0 | 100% | |
| haystack/components/writers/document_writer.py | 38 | 0 | 100% | |
| haystack/core/__init__.py | 2 | 0 | 100% | |
| haystack/core/component/__init__.py | 3 | 0 | 100% | |
| haystack/core/component/component.py | 185 | 1 | 99% | 355 |
| haystack/core/component/sockets.py | 41 | 6 | 85% | 82, 117-124, 129-130 |
| haystack/core/component/types.py | 42 | 3 | 93% | 87-89 |
| haystack/core/errors.py | 72 | 10 | 86% | 60-67, 127, 142-144, 151-153, 166 |
| haystack/core/pipeline/__init__.py | 2 | 0 | 100% | |
| haystack/core/pipeline/base.py | 596 | 53 | 91% | 123, 265-266, 270, 409, 421, 620, 657-667, 832, 900, 1470, 1636, 1640, 1650-1656, 1673-1735 |
| haystack/core/pipeline/breakpoint.py | 107 | 11 | 90% | 52, 71, 80, 88, 115-120, 187 |
| haystack/core/pipeline/component_checks.py | 57 | 0 | 100% | |
| haystack/core/pipeline/descriptions.py | 6 | 0 | 100% | |
| haystack/core/pipeline/draw.py | 199 | 41 | 79% | 35-58, 142, 145, 148, 150, 158, 162-169, 293, 303, 375-377, 382, 390-391, 419-424 |
| haystack/core/pipeline/pipeline.py | 319 | 21 | 93% | 171, 178, 407, 451-452, 552, 575, 743, 936, 941, 958-962, 966-978, 1019-1028, 1053 |
| haystack/core/pipeline/utils.py | 71 | 1 | 99% | 206 |
| haystack/core/serialization.py | 127 | 6 | 95% | 75, 99, 246, 333, 349-350 |
| haystack/core/serialization_security.py | 85 | 2 | 98% | 206, 276 |
| haystack/core/super_component/__init__.py | 2 | 0 | 100% | |
| haystack/core/super_component/super_component.py | 194 | 7 | 96% | 67, 196, 209, 247, 301, 343, 596 |
| haystack/core/super_component/utils.py | 95 | 4 | 96% | 77, 112, 124, 181 |
| haystack/core/type_utils.py | 153 | 5 | 97% | 51, 58, 121, 157, 249 |
| haystack/dataclasses/__init__.py | 5 | 0 | 100% | |
| haystack/dataclasses/answer.py | 57 | 0 | 100% | |
| haystack/dataclasses/breakpoints.py | 37 | 0 | 100% | |
| haystack/dataclasses/byte_stream.py | 39 | 0 | 100% | |
| haystack/dataclasses/chat_message.py | 341 | 4 | 99% | 140, 381, 397, 619 |
| haystack/dataclasses/document.py | 94 | 4 | 96% | 79, 81, 83, 85 |
| haystack/dataclasses/file_content.py | 68 | 0 | 100% | |
| haystack/dataclasses/image_content.py | 85 | 2 | 98% | 100-104 |
| haystack/dataclasses/skill_info.py | 3 | 0 | 100% | |
| haystack/dataclasses/sparse_embedding.py | 14 | 0 | 100% | |
| haystack/dataclasses/streaming_chunk.py | 81 | 1 | 99% | 182 |
| haystack/document_stores/__init__.py | 0 | 0 | 100% | |
| haystack/document_stores/errors/__init__.py | 2 | 0 | 100% | |
| haystack/document_stores/errors/errors.py | 6 | 0 | 100% | |
| haystack/document_stores/in_memory/__init__.py | 5 | 0 | 100% | |
| haystack/document_stores/in_memory/document_store.py | 424 | 16 | 96% | 411-412, 421, 521, 584, 623, 625, 652-653, 668, 692, 828, 830, 848, 853-854 |
| haystack/document_stores/types/__init__.py | 4 | 0 | 100% | |
| haystack/document_stores/types/filter_policy.py | 65 | 11 | 83% | 25, 38-39, 166, 174-181, 224-229, 233-239 |
| haystack/document_stores/types/policy.py | 6 | 0 | 100% | |
| haystack/document_stores/types/protocol.py | 11 | 0 | 100% | |
| haystack/errors.py | 2 | 0 | 100% | |
| haystack/evaluation/__init__.py | 5 | 0 | 100% | |
| haystack/evaluation/eval_run_result.py | 93 | 35 | 62% | 72-97, 111-120, 189, 192, 195, 200, 211, 215 |
| haystack/hooks/__init__.py | 5 | 0 | 100% | |
| haystack/hooks/from_function.py | 50 | 2 | 96% | 29-30 |
| haystack/hooks/human_in_the_loop/__init__.py | 5 | 0 | 100% | |
| haystack/hooks/human_in_the_loop/dataclasses.py | 16 | 0 | 100% | |
| haystack/hooks/human_in_the_loop/hooks.py | 30 | 1 | 97% | 117 |
| haystack/hooks/human_in_the_loop/policies.py | 17 | 0 | 100% | |
| haystack/hooks/human_in_the_loop/strategies.py | 158 | 9 | 94% | 120-121, 265, 314, 358, 419, 453, 510, 620 |
| haystack/hooks/human_in_the_loop/types/__init__.py | 2 | 0 | 100% | |
| haystack/hooks/human_in_the_loop/types/protocol.py | 25 | 0 | 100% | |
| haystack/hooks/human_in_the_loop/user_interfaces.py | 96 | 2 | 98% | 65, 103 |
| haystack/hooks/invocation.py | 9 | 0 | 100% | |
| haystack/hooks/protocol.py | 15 | 0 | 100% | |
| haystack/hooks/tool_result_offloading/__init__.py | 5 | 0 | 100% | |
| haystack/hooks/tool_result_offloading/hooks.py | 95 | 1 | 99% | 222 |
| haystack/hooks/tool_result_offloading/policies.py | 17 | 0 | 100% | |
| haystack/hooks/tool_result_offloading/stores.py | 27 | 0 | 100% | |
| haystack/hooks/tool_result_offloading/types/__init__.py | 2 | 0 | 100% | |
| haystack/hooks/tool_result_offloading/types/protocol.py | 18 | 2 | 89% | 39, 44 |
| haystack/hooks/utils.py | 47 | 0 | 100% | |
| haystack/lazy_imports.py | 13 | 0 | 100% | |
| haystack/logging.py | 129 | 4 | 97% | 247-248, 358-360 |
| haystack/marshal/__init__.py | 5 | 0 | 100% | |
| haystack/marshal/protocol.py | 4 | 0 | 100% | |
| haystack/marshal/yaml.py | 21 | 1 | 95% | 42 |
| haystack/skill_stores/__init__.py | 0 | 0 | 100% | |
| haystack/skill_stores/file_system/__init__.py | 5 | 0 | 100% | |
| haystack/skill_stores/file_system/skill_store.py | 95 | 1 | 99% | 119 |
| haystack/skill_stores/types/__init__.py | 2 | 0 | 100% | |
| haystack/skill_stores/types/protocol.py | 11 | 0 | 100% | |
| haystack/telemetry/__init__.py | 1 | 0 | 100% | |
| haystack/telemetry/_environment.py | 25 | 0 | 100% | |
| haystack/telemetry/_telemetry.py | 83 | 12 | 86% | 70-76, 94-95, 114-115, 188 |
| haystack/tools/__init__.py | 7 | 0 | 100% | |
| haystack/tools/component_tool.py | 100 | 5 | 95% | 372-373, 416-418 |
| haystack/tools/errors.py | 6 | 0 | 100% | |
| haystack/tools/from_function.py | 57 | 0 | 100% | |
| haystack/tools/parameters_schema_utils.py | 97 | 3 | 97% | 95, 135-136 |
| haystack/tools/pipeline_tool.py | 30 | 2 | 93% | 240, 243 |
| haystack/tools/searchable_toolset.py | 120 | 2 | 98% | 191, 214 |
| haystack/tools/serde_utils.py | 43 | 3 | 93% | 33, 35, 57 |
| haystack/tools/skills/__init__.py | 2 | 0 | 100% | |
| haystack/tools/skills/skill_toolset.py | 61 | 0 | 100% | |
| haystack/tools/tool.py | 150 | 5 | 97% | 174, 197, 241-242, 376 |
| haystack/tools/tool_types.py | 5 | 0 | 100% | |
| haystack/tools/toolset.py | 126 | 13 | 90% | 119, 193, 249, 301, 431-434, 440-444 |
| haystack/tools/utils.py | 29 | 0 | 100% | |
| haystack/tracing/__init__.py | 1 | 0 | 100% | |
| haystack/tracing/logging_tracer.py | 36 | 0 | 100% | |
| haystack/tracing/tracer.py | 54 | 4 | 93% | 28, 74, 94, 103 |
| haystack/tracing/utils.py | 26 | 0 | 100% | |
| haystack/utils/__init__.py | 5 | 0 | 100% | |
| haystack/utils/async_utils.py | 10 | 0 | 100% | |
| haystack/utils/auth.py | 105 | 11 | 90% | 22, 116, 124, 128, 133, 161, 234-238 |
| haystack/utils/azure.py | 6 | 2 | 67% | 15-16 |
| haystack/utils/base_serialization.py | 128 | 9 | 93% | 181-184, 204, 215, 312-316 |
| haystack/utils/callable_serialization.py | 64 | 8 | 88% | 53, 57, 107-109, 119, 130, 148 |
| haystack/utils/dataclasses.py | 22 | 0 | 100% | |
| haystack/utils/deserialization.py | 18 | 1 | 94% | 54 |
| haystack/utils/device.py | 214 | 17 | 92% | 237-239, 325-327, 364, 403, 447, 468, 484, 512-515, 539-540 |
| haystack/utils/experimental.py | 14 | 0 | 100% | |
| haystack/utils/filters.py | 119 | 0 | 100% | |
| haystack/utils/hf.py | 61 | 15 | 75% | 23-31, 40-51 |
| haystack/utils/http_client.py | 14 | 0 | 100% | |
| haystack/utils/jinja2_chat_extension.py | 146 | 1 | 99% | 405 |
| haystack/utils/jinja2_extensions.py | 47 | 0 | 100% | |
| haystack/utils/jupyter.py | 9 | 3 | 67% | 15-17 |
| haystack/utils/misc.py | 96 | 5 | 95% | 52-53, 129-132 |
| haystack/utils/requests_utils.py | 33 | 0 | 100% | |
| haystack/utils/type_serialization.py | 123 | 6 | 95% | 82, 84, 210-211, 219, 235 |
| haystack/utils/url_validation.py | 4 | 0 | 100% | |
| haystack/version.py | 5 | 2 | 60% | 9-10 |
| TOTAL | 15973 | 791 | 95% |
Below are examples of the badges you can use in your main branch README file.
This is the one to use if your repository is private or if you don't want to customize anything.
Shields.io Json Endpoint
Using this one will allow you to customize the look of your badge. It won't work with private repositories. It won't be refreshed more than once per five minutes.
Shields.io Dynamic Badge
This one will always be the same color. It won't work for private repos. I'm not even sure why we included it.
This branch is part of the python-coverage-comment-action GitHub Action. All the files in this branch are automatically generated and may be overwritten at any moment.