2026-10-09 11:51:48 +00:00
2026-07-22 15:40:39 +00:00
2026-10-09 11:51:48 +00:00
2026-07-22 15:40:39 +00:00
2026-10-09 11:51:48 +00:00

Repository Coverage

Full report

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 397 2 99% 208, 809
haystack/components/agents/state/__init__.py 5 0 100%
haystack/components/agents/state/state.py 77 2 97% 76, 80
haystack/components/agents/state/state_utils.py 18 0 100%
haystack/components/agents/tool_calling.py 250 5 98% 30, 257-259, 635
haystack/components/agents/utils.py 120 3 98% 80, 126, 297
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 114 2 98% 170, 258
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 87 4 95% 162-163, 190-191
haystack/components/converters/docx.py 172 1 99% 254
haystack/components/converters/file_to_file_content.py 32 0 100%
haystack/components/converters/html.py 54 0 100%
haystack/components/converters/image/__init__.py 5 0 100%
haystack/components/converters/image/document_to_image.py 47 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 130 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 93 11 88% 228-229, 231-234, 238-239, 254-255, 286-288
haystack/components/converters/markdown.py 71 10 86% 107, 120-122, 128-134, 152, 173-178
haystack/components/converters/msg.py 77 5 94% 91, 165-167, 179
haystack/components/converters/multi_file_converter.py 50 0 100%
haystack/components/converters/output_adapter.py 71 1 99% 133
haystack/components/converters/pdfminer.py 105 0 100%
haystack/components/converters/pptx.py 69 2 97% 89-90
haystack/components/converters/pypdf.py 103 6 94% 192, 209-211, 267-271
haystack/components/converters/txt.py 34 3 91% 88-92
haystack/components/converters/utils.py 37 0 100%
haystack/components/converters/xlsx.py 119 3 97% 83, 183, 185
haystack/components/embedders/__init__.py 5 0 100%
haystack/components/embedders/azure_document_embedder.py 69 2 97% 121, 124
haystack/components/embedders/azure_text_embedder.py 63 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 145 26 82% 187, 225, 258, 280-281, 303, 309-315, 325-326, 377-398
haystack/components/embedders/openai_text_embedder.py 73 9 88% 162, 229-231, 249-253
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 52 4 92% 73, 76-80, 134
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 153 0 100%
haystack/components/extractors/llm_metadata_extractor.py 166 12 93% 315-323, 338-346, 407, 469
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 18 91% 212-220, 288, 337-341, 426-430, 471, 504
haystack/components/generators/__init__.py 5 0 100%
haystack/components/generators/chat/__init__.py 5 0 100%
haystack/components/generators/chat/azure.py 85 3 96% 212, 362, 365
haystack/components/generators/chat/azure_responses.py 46 1 98% 274
haystack/components/generators/chat/fallback.py 102 3 97% 258-263
haystack/components/generators/chat/llm.py 40 1 98% 124
haystack/components/generators/chat/mock.py 154 0 100%
haystack/components/generators/chat/openai.py 227 4 98% 460, 511, 683, 783
haystack/components/generators/chat/openai_responses.py 365 28 92% 297, 421, 502, 518, 555, 580, 633-642, 658-659, 664, 684-693, 703, 850, 892-893, 916, 968, 993, 1012
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 80 0 100%
haystack/components/generators/utils.py 95 9 91% 69, 83, 129, 162-163, 198, 214, 216, 218
haystack/components/joiners/__init__.py 5 0 100%
haystack/components/joiners/answer_joiner.py 57 1 98% 164
haystack/components/joiners/branch.py 21 0 100%
haystack/components/joiners/document_joiner.py 104 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/_page_numbers.py 9 1 89% 29
haystack/components/preprocessors/csv_document_cleaner.py 64 0 100%
haystack/components/preprocessors/csv_document_splitter.py 108 4 96% 128, 131, 142-146
haystack/components/preprocessors/document_cleaner.py 125 1 99% 107
haystack/components/preprocessors/document_preprocessor.py 47 2 96% 168, 204
haystack/components/preprocessors/document_splitter.py 280 2 99% 213, 239
haystack/components/preprocessors/embedding_based_document_splitter.py 230 12 95% 300-301, 432, 484-496, 514, 531, 600-601
haystack/components/preprocessors/hierarchical_document_splitter.py 60 0 100%
haystack/components/preprocessors/markdown_header_splitter.py 173 6 97% 279-280, 295-296, 355, 418
haystack/components/preprocessors/python_code_splitter.py 291 15 95% 151, 163, 191, 198, 232, 281, 309-311, 412-414, 416, 529, 597
haystack/components/preprocessors/recursive_splitter.py 266 20 92% 164-167, 208-210, 249-251, 264-266, 299, 338, 472, 478-481
haystack/components/preprocessors/sentence_tokenizer.py 87 4 95% 65-66, 73-78
haystack/components/preprocessors/text_cleaner.py 33 0 100%
haystack/components/query/__init__.py 5 0 100%
haystack/components/query/query_expander.py 142 10 93% 282-283, 289, 299-304, 311-317, 328-336
haystack/components/rankers/__init__.py 5 0 100%
haystack/components/rankers/llm_ranker.py 154 5 97% 342, 376, 404, 413, 417
haystack/components/rankers/lost_in_the_middle.py 43 2 95% 83, 117
haystack/components/rankers/meta_field.py 119 0 100%
haystack/components/rankers/meta_field_grouping_ranker.py 39 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 30 1 97% 55
haystack/components/retrievers/in_memory/__init__.py 5 0 100%
haystack/components/retrievers/in_memory/bm25_retriever.py 48 0 100%
haystack/components/retrievers/in_memory/embedding_retriever.py 53 1 98% 102
haystack/components/retrievers/multi_query_embedding_retriever.py 82 2 98% 202, 221
haystack/components/retrievers/multi_query_text_retriever.py 72 3 96% 124, 178, 193
haystack/components/retrievers/multi_retriever.py 131 1 99% 160
haystack/components/retrievers/sentence_window_retriever.py 112 1 99% 138
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 179 8 96% 484-485, 521, 539, 581, 599, 609, 621
haystack/components/routers/document_length_router.py 15 0 100%
haystack/components/routers/document_type_router.py 48 0 100%
haystack/components/routers/file_type_router.py 78 6 92% 197-202
haystack/components/routers/llm_messages_router.py 92 1 99% 204
haystack/components/routers/metadata_router.py 38 0 100%
haystack/components/samplers/__init__.py 5 0 100%
haystack/components/samplers/top_p.py 67 0 100%
haystack/components/validators/__init__.py 5 0 100%
haystack/components/validators/json_schema.py 73 7 90% 23-24, 142, 144, 159, 247, 253
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 179 1 99% 346
haystack/core/component/sockets.py 41 6 85% 82, 117-124, 129-130
haystack/core/component/types.py 42 3 93% 88-90
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 640 51 92% 270-271, 275, 490, 710, 747-757, 947, 1015, 1598, 1765, 1769, 1779-1785, 1800-1862
haystack/core/pipeline/breakpoint.py 110 11 90% 52, 71, 90, 98, 125-130, 198
haystack/core/pipeline/component_checks.py 66 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, 296, 306, 378-380, 385, 393-394, 422-427
haystack/core/pipeline/pipeline.py 331 19 94% 174, 181, 426, 569, 604, 772, 967, 972, 989-993, 997-1009, 1050-1059, 1084
haystack/core/pipeline/utils.py 71 1 99% 206
haystack/core/serialization.py 129 6 95% 76, 100, 247, 334, 350-351
haystack/core/serialization_security.py 135 0 100%
haystack/core/super_component/__init__.py 2 0 100%
haystack/core/super_component/super_component.py 195 7 96% 67, 199, 212, 250, 304, 346, 599
haystack/core/super_component/utils.py 95 4 96% 77, 112, 124, 181
haystack/core/type_utils.py 173 6 97% 95, 97, 102, 167, 211, 306
haystack/dataclasses/__init__.py 5 0 100%
haystack/dataclasses/answer.py 57 0 100%
haystack/dataclasses/breakpoints.py 39 0 100%
haystack/dataclasses/byte_stream.py 39 0 100%
haystack/dataclasses/chat_message.py 420 4 99% 160, 401, 417, 639
haystack/dataclasses/document.py 104 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 446 16 96% 66, 468-469, 478, 584, 665, 716, 718, 745-746, 802, 944, 946, 964, 969-970
haystack/document_stores/types/__init__.py 4 0 100%
haystack/document_stores/types/filter_policy.py 65 10 85% 25, 38-39, 190, 198-204, 250-255, 259-265
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 17 82% 75, 92-97, 112-113, 117, 120, 189, 192, 195, 200, 211, 215
haystack/hooks/__init__.py 5 0 100%
haystack/hooks/budget/__init__.py 5 0 100%
haystack/hooks/budget/hooks.py 32 0 100%
haystack/hooks/compaction/__init__.py 5 0 100%
haystack/hooks/compaction/hooks.py 111 1 99% 296
haystack/hooks/compaction/sliding_window.py 67 0 100%
haystack/hooks/compaction/summarization.py 171 16 91% 89, 314-317, 475-479, 483-484, 488-492
haystack/hooks/compaction/tool_result_offloading.py 50 1 98% 164
haystack/hooks/compaction/tool_result_pruning.py 36 0 100%
haystack/hooks/compaction/types/__init__.py 2 0 100%
haystack/hooks/compaction/types/protocol.py 12 0 100%
haystack/hooks/compaction/utils.py 71 0 100%
haystack/hooks/from_function.py 45 0 100%
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 188 5 97% 338, 386, 430, 499, 693
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 40 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 76 2 97% 183, 253
haystack/hooks/tool_result_offloading/policies.py 17 0 100%
haystack/hooks/tool_result_offloading/stores.py 34 0 100%
haystack/hooks/tool_result_offloading/types/__init__.py 2 0 100%
haystack/hooks/tool_result_offloading/types/protocol.py 19 2 89% 56, 61
haystack/hooks/tool_result_offloading/utils.py 58 0 100%
haystack/hooks/utils.py 47 0 100%
haystack/lazy_imports.py 13 0 100%
haystack/logging.py 142 4 97% 251-252, 383-385
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 105 2 98% 102, 136
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/token_counters/__init__.py 5 0 100%
haystack/token_counters/approximate_counter.py 21 0 100%
haystack/token_counters/openai_counter.py 48 1 98% 107
haystack/token_counters/tiktoken_counter.py 28 0 100%
haystack/token_counters/types/__init__.py 2 0 100%
haystack/token_counters/types/protocol.py 10 0 100%
haystack/token_counters/utils.py 49 0 100%
haystack/tools/__init__.py 7 0 100%
haystack/tools/agent_tool.py 51 0 100%
haystack/tools/component_tool.py 109 5 95% 381-382, 425-427
haystack/tools/errors.py 6 0 100%
haystack/tools/from_function.py 63 0 100%
haystack/tools/parameters_schema_utils.py 105 3 97% 108, 148-149
haystack/tools/pipeline_tool.py 30 2 93% 240, 243
haystack/tools/searchable_toolset.py 124 0 100%
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 64 0 100%
haystack/tools/tool.py 154 5 97% 175, 198, 242-243, 374
haystack/tools/tool_types.py 5 0 100%
haystack/tools/toolset.py 46 3 93% 101, 157, 211
haystack/tools/utils.py 53 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 19 0 100%
haystack/utils/auth.py 105 6 94% 22, 116, 124, 128, 133, 161
haystack/utils/azure.py 6 2 67% 15-16
haystack/utils/base_serialization.py 136 9 93% 186-189, 210, 221, 331-335
haystack/utils/callable_serialization.py 66 8 88% 56, 60, 117-119, 129, 140, 171
haystack/utils/dataclasses.py 22 0 100%
haystack/utils/deserialization.py 18 1 94% 54
haystack/utils/device.py 216 17 92% 237-239, 325-327, 364, 403, 456, 477, 493, 521-524, 548-549
haystack/utils/experimental.py 14 0 100%
haystack/utils/filters.py 158 0 100%
haystack/utils/hf.py 62 15 76% 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/jinja2_sandbox.py 16 0 100%
haystack/utils/jupyter.py 9 3 67% 15-17
haystack/utils/misc.py 99 5 95% 52-53, 132-135
haystack/utils/requests_utils.py 33 0 100%
haystack/utils/type_serialization.py 144 6 96% 106, 108, 260-261, 269, 285
haystack/utils/url_validation.py 4 0 100%
haystack/version.py 5 2 60% 9-10
TOTAL 17644 712 96%

Setup coverage badge

Below are examples of the badges you can use in your main branch README file.

Direct image

Coverage badge

This is the one to use if your repository is private or if you don't want to customize anything.

Shields.io Json Endpoint

Coverage badge

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

Coverage 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.

What is that?

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.

S
Description
Open-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.
Readme Apache-2.0
450 MiB
Languages
Python 98.3%
HTML 1.4%
Shell 0.2%