haystack-ai 3.2.0.dev20260904000310__tar.gz → 3.2.0.dev20260906000331__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/PKG-INFO +1 -1
  2. haystack_ai-3.2.0.dev20260906000331/VERSION.txt +1 -0
  3. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/document_preprocessor.py +9 -2
  4. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/document_splitter.py +73 -3
  5. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/hooks.py +34 -7
  6. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/utils.py +0 -22
  7. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/tool_result_offloading/hooks.py +5 -3
  8. haystack_ai-3.2.0.dev20260904000310/VERSION.txt +0 -1
  9. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/.gitignore +0 -0
  10. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/LICENSE +0 -0
  11. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/README.md +0 -0
  12. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/__init__.py +0 -0
  13. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/__init__.py +0 -0
  14. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/__init__.py +0 -0
  15. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/agent.py +0 -0
  16. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/state/__init__.py +0 -0
  17. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/state/state.py +0 -0
  18. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/state/state_utils.py +0 -0
  19. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/tool_calling.py +0 -0
  20. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/agents/utils.py +0 -0
  21. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/builders/__init__.py +0 -0
  22. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/builders/answer_builder.py +0 -0
  23. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/builders/chat_prompt_builder.py +0 -0
  24. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/builders/prompt_builder.py +0 -0
  25. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/caching/__init__.py +0 -0
  26. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/caching/cache_checker.py +0 -0
  27. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/__init__.py +0 -0
  28. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/csv.py +0 -0
  29. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/docx.py +0 -0
  30. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/file_to_file_content.py +0 -0
  31. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/html.py +0 -0
  32. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/image/__init__.py +0 -0
  33. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/image/document_to_image.py +0 -0
  34. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/image/file_to_document.py +0 -0
  35. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/image/file_to_image.py +0 -0
  36. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/image/image_utils.py +0 -0
  37. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/image/pdf_to_image.py +0 -0
  38. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/json.py +0 -0
  39. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/markdown.py +0 -0
  40. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/msg.py +0 -0
  41. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/multi_file_converter.py +0 -0
  42. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/output_adapter.py +0 -0
  43. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/pdfminer.py +0 -0
  44. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/pptx.py +0 -0
  45. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/pypdf.py +0 -0
  46. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/txt.py +0 -0
  47. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/utils.py +0 -0
  48. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/converters/xlsx.py +0 -0
  49. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/__init__.py +0 -0
  50. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/azure_document_embedder.py +0 -0
  51. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/azure_text_embedder.py +0 -0
  52. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/mock_document_embedder.py +0 -0
  53. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/mock_text_embedder.py +0 -0
  54. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/mock_utils.py +0 -0
  55. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/openai_document_embedder.py +0 -0
  56. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/openai_text_embedder.py +0 -0
  57. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/types/__init__.py +0 -0
  58. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/embedders/types/protocol.py +0 -0
  59. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/__init__.py +0 -0
  60. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/answer_exact_match.py +0 -0
  61. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/context_relevance.py +0 -0
  62. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/document_map.py +0 -0
  63. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/document_mrr.py +0 -0
  64. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/document_ndcg.py +0 -0
  65. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/document_recall.py +0 -0
  66. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/faithfulness.py +0 -0
  67. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/llm_evaluator.py +0 -0
  68. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/evaluators/sas_evaluator.py +0 -0
  69. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/extractors/__init__.py +0 -0
  70. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/extractors/image/__init__.py +0 -0
  71. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/extractors/image/llm_document_content_extractor.py +0 -0
  72. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/extractors/llm_metadata_extractor.py +0 -0
  73. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/extractors/regex_text_extractor.py +0 -0
  74. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/fetchers/__init__.py +0 -0
  75. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/fetchers/link_content.py +0 -0
  76. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/__init__.py +0 -0
  77. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/__init__.py +0 -0
  78. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/azure.py +0 -0
  79. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/azure_responses.py +0 -0
  80. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/fallback.py +0 -0
  81. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/llm.py +0 -0
  82. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/mock.py +0 -0
  83. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/openai.py +0 -0
  84. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/openai_responses.py +0 -0
  85. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/types/__init__.py +0 -0
  86. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/chat/types/protocol.py +0 -0
  87. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/openai_image_generator.py +0 -0
  88. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/generators/utils.py +0 -0
  89. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/joiners/__init__.py +0 -0
  90. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/joiners/answer_joiner.py +0 -0
  91. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/joiners/branch.py +0 -0
  92. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/joiners/document_joiner.py +0 -0
  93. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/joiners/list_joiner.py +0 -0
  94. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/joiners/string_joiner.py +0 -0
  95. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/__init__.py +0 -0
  96. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/csv_document_cleaner.py +0 -0
  97. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/csv_document_splitter.py +0 -0
  98. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/document_cleaner.py +0 -0
  99. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/embedding_based_document_splitter.py +0 -0
  100. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/hierarchical_document_splitter.py +0 -0
  101. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/markdown_header_splitter.py +0 -0
  102. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/python_code_splitter.py +0 -0
  103. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/recursive_splitter.py +0 -0
  104. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/sentence_tokenizer.py +0 -0
  105. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/preprocessors/text_cleaner.py +0 -0
  106. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/query/__init__.py +0 -0
  107. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/query/query_expander.py +0 -0
  108. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/rankers/__init__.py +0 -0
  109. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/rankers/llm_ranker.py +0 -0
  110. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/rankers/lost_in_the_middle.py +0 -0
  111. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/rankers/meta_field.py +0 -0
  112. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/rankers/meta_field_grouping_ranker.py +0 -0
  113. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/__init__.py +0 -0
  114. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/auto_merging_retriever.py +0 -0
  115. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/filter_retriever.py +0 -0
  116. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/in_memory/__init__.py +0 -0
  117. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/in_memory/bm25_retriever.py +0 -0
  118. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/in_memory/embedding_retriever.py +0 -0
  119. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/multi_query_embedding_retriever.py +0 -0
  120. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/multi_query_text_retriever.py +0 -0
  121. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/multi_retriever.py +0 -0
  122. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/sentence_window_retriever.py +0 -0
  123. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/text_embedding_retriever.py +0 -0
  124. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/types/__init__.py +0 -0
  125. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/retrievers/types/protocol.py +0 -0
  126. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/__init__.py +0 -0
  127. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/conditional_router.py +0 -0
  128. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/document_length_router.py +0 -0
  129. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/document_type_router.py +0 -0
  130. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/file_type_router.py +0 -0
  131. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/llm_messages_router.py +0 -0
  132. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/routers/metadata_router.py +0 -0
  133. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/samplers/__init__.py +0 -0
  134. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/samplers/top_p.py +0 -0
  135. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/validators/__init__.py +0 -0
  136. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/validators/json_schema.py +0 -0
  137. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/writers/__init__.py +0 -0
  138. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/components/writers/document_writer.py +0 -0
  139. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/__init__.py +0 -0
  140. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/component/__init__.py +0 -0
  141. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/component/component.py +0 -0
  142. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/component/sockets.py +0 -0
  143. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/component/types.py +0 -0
  144. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/errors.py +0 -0
  145. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/__init__.py +0 -0
  146. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/base.py +0 -0
  147. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/breakpoint.py +0 -0
  148. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/component_checks.py +0 -0
  149. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/descriptions.py +0 -0
  150. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/draw.py +0 -0
  151. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/pipeline.py +0 -0
  152. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/pipeline/utils.py +0 -0
  153. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/serialization.py +0 -0
  154. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/serialization_security.py +0 -0
  155. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/super_component/__init__.py +0 -0
  156. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/super_component/super_component.py +0 -0
  157. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/super_component/utils.py +0 -0
  158. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/core/type_utils.py +0 -0
  159. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/data/abbreviations/de.txt +0 -0
  160. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/data/abbreviations/en.txt +0 -0
  161. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/__init__.py +0 -0
  162. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/answer.py +0 -0
  163. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/breakpoints.py +0 -0
  164. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/byte_stream.py +0 -0
  165. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/chat_message.py +0 -0
  166. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/document.py +0 -0
  167. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/file_content.py +0 -0
  168. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/image_content.py +0 -0
  169. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/skill_info.py +0 -0
  170. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/sparse_embedding.py +0 -0
  171. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/dataclasses/streaming_chunk.py +0 -0
  172. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/__init__.py +0 -0
  173. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/errors/__init__.py +0 -0
  174. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/errors/errors.py +0 -0
  175. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/in_memory/__init__.py +0 -0
  176. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/in_memory/document_store.py +0 -0
  177. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/types/__init__.py +0 -0
  178. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/types/filter_policy.py +0 -0
  179. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/types/policy.py +0 -0
  180. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/document_stores/types/protocol.py +0 -0
  181. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/errors.py +0 -0
  182. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/evaluation/__init__.py +0 -0
  183. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/evaluation/eval_run_result.py +0 -0
  184. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/__init__.py +0 -0
  185. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/budget/__init__.py +0 -0
  186. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/budget/hooks.py +0 -0
  187. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/__init__.py +0 -0
  188. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/sliding_window.py +0 -0
  189. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/summarization.py +0 -0
  190. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/tool_result_pruning.py +0 -0
  191. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/types/__init__.py +0 -0
  192. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/compaction/types/protocol.py +0 -0
  193. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/from_function.py +0 -0
  194. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/__init__.py +0 -0
  195. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/dataclasses.py +0 -0
  196. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/hooks.py +0 -0
  197. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/policies.py +0 -0
  198. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/strategies.py +0 -0
  199. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/types/__init__.py +0 -0
  200. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/types/protocol.py +0 -0
  201. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/human_in_the_loop/user_interfaces.py +0 -0
  202. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/invocation.py +0 -0
  203. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/protocol.py +0 -0
  204. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/tool_result_offloading/__init__.py +0 -0
  205. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/tool_result_offloading/policies.py +0 -0
  206. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/tool_result_offloading/stores.py +0 -0
  207. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/tool_result_offloading/types/__init__.py +0 -0
  208. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/tool_result_offloading/types/protocol.py +0 -0
  209. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/hooks/utils.py +0 -0
  210. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/lazy_imports.py +0 -0
  211. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/logging.py +0 -0
  212. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/marshal/__init__.py +0 -0
  213. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/marshal/protocol.py +0 -0
  214. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/marshal/yaml.py +0 -0
  215. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/py.typed +0 -0
  216. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/skill_stores/__init__.py +0 -0
  217. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/skill_stores/file_system/__init__.py +0 -0
  218. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/skill_stores/file_system/skill_store.py +0 -0
  219. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/skill_stores/types/__init__.py +0 -0
  220. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/skill_stores/types/protocol.py +0 -0
  221. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/telemetry/__init__.py +0 -0
  222. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/telemetry/_environment.py +0 -0
  223. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/telemetry/_telemetry.py +0 -0
  224. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/__init__.py +0 -0
  225. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/callable_serialization/random_callable.py +0 -0
  226. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/document_store.py +0 -0
  227. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/document_store_async.py +0 -0
  228. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/factory.py +0 -0
  229. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/__init__.py +0 -0
  230. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/accumulate.py +0 -0
  231. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/add_value.py +0 -0
  232. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/concatenate.py +0 -0
  233. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/double.py +0 -0
  234. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/fstring.py +0 -0
  235. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/future_annotations.py +0 -0
  236. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/greet.py +0 -0
  237. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/hello.py +0 -0
  238. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/joiner.py +0 -0
  239. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/parity.py +0 -0
  240. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/remainder.py +0 -0
  241. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/repeat.py +0 -0
  242. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/subtract.py +0 -0
  243. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/sum.py +0 -0
  244. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/text_splitter.py +0 -0
  245. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/sample_components/threshold.py +0 -0
  246. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/telemetry.py +0 -0
  247. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/testing/test_utils.py +0 -0
  248. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/__init__.py +0 -0
  249. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/approximate_counter.py +0 -0
  250. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/openai_counter.py +0 -0
  251. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/tiktoken_counter.py +0 -0
  252. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/types/__init__.py +0 -0
  253. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/types/protocol.py +0 -0
  254. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/token_counters/utils.py +0 -0
  255. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/__init__.py +0 -0
  256. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/agent_tool.py +0 -0
  257. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/component_tool.py +0 -0
  258. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/errors.py +0 -0
  259. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/from_function.py +0 -0
  260. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/parameters_schema_utils.py +0 -0
  261. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/pipeline_tool.py +0 -0
  262. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/searchable_toolset.py +0 -0
  263. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/serde_utils.py +0 -0
  264. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/skills/__init__.py +0 -0
  265. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/skills/skill_toolset.py +0 -0
  266. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/tool.py +0 -0
  267. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/tool_types.py +0 -0
  268. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/toolset.py +0 -0
  269. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tools/utils.py +0 -0
  270. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tracing/__init__.py +0 -0
  271. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tracing/logging_tracer.py +0 -0
  272. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tracing/tracer.py +0 -0
  273. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/tracing/utils.py +0 -0
  274. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/__init__.py +0 -0
  275. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/async_utils.py +0 -0
  276. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/auth.py +0 -0
  277. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/azure.py +0 -0
  278. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/base_serialization.py +0 -0
  279. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/callable_serialization.py +0 -0
  280. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/dataclasses.py +0 -0
  281. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/deserialization.py +0 -0
  282. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/device.py +0 -0
  283. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/experimental.py +0 -0
  284. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/filters.py +0 -0
  285. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/hf.py +0 -0
  286. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/http_client.py +0 -0
  287. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/jinja2_chat_extension.py +0 -0
  288. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/jinja2_extensions.py +0 -0
  289. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/jinja2_sandbox.py +0 -0
  290. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/jupyter.py +0 -0
  291. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/misc.py +0 -0
  292. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/requests_utils.py +0 -0
  293. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/type_serialization.py +0 -0
  294. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/utils/url_validation.py +0 -0
  295. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/haystack/version.py +0 -0
  296. {haystack_ai-3.2.0.dev20260904000310 → haystack_ai-3.2.0.dev20260906000331}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: haystack-ai
3
- Version: 3.2.0.dev20260904000310
3
+ Version: 3.2.0.dev20260906000331
4
4
  Summary: LLM framework to build customizable, production-ready LLM applications. Connect components (models, vector DBs, file converters) to pipelines or agents that can interact with your data.
5
5
  Project-URL: CI: GitHub, https://github.com/deepset-ai/haystack/actions
6
6
  Project-URL: Docs: RTD, https://haystack.deepset.ai/overview/intro
@@ -0,0 +1 @@
1
+ 3.2.0.dev20260906000331
@@ -35,7 +35,7 @@ class DocumentPreprocessor:
35
35
  self,
36
36
  *,
37
37
  # --- DocumentSplitter arguments ---
38
- split_by: Literal["function", "page", "passage", "period", "word", "line", "sentence"] = "word",
38
+ split_by: Literal["function", "page", "passage", "period", "word", "line", "sentence", "token"] = "word",
39
39
  split_length: int = 250,
40
40
  split_overlap: int = 0,
41
41
  split_threshold: int = 0,
@@ -44,6 +44,7 @@ class DocumentPreprocessor:
44
44
  language: Language = "en",
45
45
  use_split_rules: bool = True,
46
46
  extend_abbreviations: bool = True,
47
+ tokenizer_encoding: str = "o200k_base",
47
48
  # --- DocumentCleaner arguments ---
48
49
  remove_empty_lines: bool = True,
49
50
  remove_extra_whitespaces: bool = True,
@@ -58,7 +59,8 @@ class DocumentPreprocessor:
58
59
  Initialize a DocumentPreProcessor that first splits and then cleans documents.
59
60
 
60
61
  **Splitter Parameters**:
61
- :param split_by: The unit of splitting: "function", "page", "passage", "period", "word", "line", or "sentence".
62
+ :param split_by: The unit of splitting: "function", "page", "passage", "period", "word", "line",
63
+ "sentence", or "token".
62
64
  :param split_length: The maximum number of units (words, lines, pages, and so on) in each split.
63
65
  :param split_overlap: The number of overlapping units between consecutive splits.
64
66
  :param split_threshold: The minimum number of units per split. If a split is smaller than this, it's merged
@@ -70,6 +72,8 @@ class DocumentPreprocessor:
70
72
  :param use_split_rules: Whether to apply additional splitting heuristics for the sentence splitter.
71
73
  :param extend_abbreviations: Whether to extend the sentence splitter with curated abbreviations for certain
72
74
  languages.
75
+ :param tokenizer_encoding: The tiktoken encoding to use when `split_by="token"`. Defaults to
76
+ `"o200k_base"` (current OpenAI models). Only used when `split_by="token"`.
73
77
 
74
78
  **Cleaner Parameters**:
75
79
  :param remove_empty_lines: If `True`, removes empty lines.
@@ -100,6 +104,7 @@ class DocumentPreprocessor:
100
104
  self.language = language
101
105
  self.use_split_rules = use_split_rules
102
106
  self.extend_abbreviations = extend_abbreviations
107
+ self.tokenizer_encoding = tokenizer_encoding
103
108
 
104
109
  # Instantiate sub-components
105
110
  splitter = DocumentSplitter(
@@ -112,6 +117,7 @@ class DocumentPreprocessor:
112
117
  language=self.language,
113
118
  use_split_rules=self.use_split_rules,
114
119
  extend_abbreviations=self.extend_abbreviations,
120
+ tokenizer_encoding=self.tokenizer_encoding,
115
121
  )
116
122
 
117
123
  cleaner = DocumentCleaner(
@@ -180,6 +186,7 @@ class DocumentPreprocessor:
180
186
  language=self.language,
181
187
  use_split_rules=self.use_split_rules,
182
188
  extend_abbreviations=self.extend_abbreviations,
189
+ tokenizer_encoding=self.tokenizer_encoding,
183
190
  )
184
191
 
185
192
  @classmethod
@@ -11,8 +11,12 @@ from more_itertools import windowed
11
11
  from haystack import Document, component, logging
12
12
  from haystack.components.preprocessors.sentence_tokenizer import Language, SentenceSplitter, nltk_imports
13
13
  from haystack.core.serialization import default_from_dict, default_to_dict
14
+ from haystack.lazy_imports import LazyImport
14
15
  from haystack.utils import deserialize_callable, serialize_callable
15
16
 
17
+ with LazyImport("Run 'pip install tiktoken'") as tiktoken_imports:
18
+ import tiktoken
19
+
16
20
  logger = logging.getLogger(__name__)
17
21
 
18
22
  # mapping of split by character, 'function' and 'sentence' don't split by character
@@ -54,7 +58,7 @@ class DocumentSplitter:
54
58
 
55
59
  def __init__(
56
60
  self,
57
- split_by: Literal["function", "page", "passage", "period", "word", "line", "sentence"] = "word",
61
+ split_by: Literal["function", "page", "passage", "period", "word", "line", "sentence", "token"] = "word",
58
62
  split_length: int = 200,
59
63
  split_overlap: int = 0,
60
64
  split_threshold: int = 0,
@@ -65,6 +69,7 @@ class DocumentSplitter:
65
69
  extend_abbreviations: bool = True,
66
70
  *,
67
71
  skip_empty_documents: bool = True,
72
+ tokenizer_encoding: str = "o200k_base",
68
73
  ) -> None:
69
74
  """
70
75
  Initialize DocumentSplitter.
@@ -76,6 +81,7 @@ class DocumentSplitter:
76
81
  - `passage` for splitting by double line breaks ("\\n\\n")
77
82
  - `line` for splitting each line ("\\n")
78
83
  - `sentence` for splitting by NLTK sentence tokenizer
84
+ - `token` for splitting by token count using tiktoken (requires `pip install tiktoken`)
79
85
 
80
86
  :param split_length: The maximum number of units in each split.
81
87
  :param split_overlap: The number of overlapping units for each split.
@@ -93,6 +99,8 @@ class DocumentSplitter:
93
99
  :param skip_empty_documents: Choose whether to skip documents with empty content. Default is True.
94
100
  Set to False when downstream components in the Pipeline (like LLMDocumentContentExtractor) can extract text
95
101
  from non-textual documents.
102
+ :param tokenizer_encoding: The tiktoken encoding to use when `split_by="token"`. Defaults to
103
+ `"o200k_base"` (current OpenAI models). Only used when `split_by="token"`.
96
104
  """
97
105
 
98
106
  self.split_by = split_by
@@ -105,6 +113,7 @@ class DocumentSplitter:
105
113
  self.use_split_rules = use_split_rules
106
114
  self.extend_abbreviations = extend_abbreviations
107
115
  self.skip_empty_documents = skip_empty_documents
116
+ self.tokenizer_encoding = tokenizer_encoding
108
117
 
109
118
  self._init_checks(
110
119
  split_by=split_by,
@@ -117,6 +126,9 @@ class DocumentSplitter:
117
126
  if self._use_sentence_splitter:
118
127
  nltk_imports.check()
119
128
  self.sentence_splitter: SentenceSplitter | None = None
129
+ if split_by == "token":
130
+ tiktoken_imports.check()
131
+ self._tiktoken_tokenizer: "tiktoken.Encoding | None" = None
120
132
 
121
133
  def _init_checks(
122
134
  self,
@@ -137,7 +149,7 @@ class DocumentSplitter:
137
149
  :param respect_sentence_boundary: Whether to respect sentence boundaries when splitting
138
150
  :raises ValueError: If any parameter is invalid
139
151
  """
140
- valid_split_by = ["function", "page", "passage", "period", "word", "line", "sentence"]
152
+ valid_split_by = ["function", "page", "passage", "period", "word", "line", "sentence", "token"]
141
153
  if split_by not in valid_split_by:
142
154
  raise ValueError(f"split_by must be one of {', '.join(valid_split_by)}.")
143
155
 
@@ -162,7 +174,7 @@ class DocumentSplitter:
162
174
 
163
175
  def warm_up(self) -> None:
164
176
  """
165
- Warm up the DocumentSplitter by loading the sentence tokenizer.
177
+ Warm up the DocumentSplitter by loading the sentence tokenizer or tiktoken encoder.
166
178
  """
167
179
  if self._use_sentence_splitter and self.sentence_splitter is None:
168
180
  self.sentence_splitter = SentenceSplitter(
@@ -171,6 +183,8 @@ class DocumentSplitter:
171
183
  extend_abbreviations=self.extend_abbreviations,
172
184
  keep_white_spaces=True,
173
185
  )
186
+ if self.split_by == "token" and self._tiktoken_tokenizer is None:
187
+ self._tiktoken_tokenizer = tiktoken.get_encoding(self.tokenizer_encoding)
174
188
 
175
189
  @component.output_types(documents=list[Document])
176
190
  def run(self, documents: list[Document]) -> dict[str, list[Document]]:
@@ -192,6 +206,8 @@ class DocumentSplitter:
192
206
  """
193
207
  if self._use_sentence_splitter and self.sentence_splitter is None:
194
208
  self.warm_up()
209
+ if self.split_by == "token" and self._tiktoken_tokenizer is None:
210
+ self.warm_up()
195
211
 
196
212
  if not isinstance(documents, list) or (documents and not isinstance(documents[0], Document)):
197
213
  raise TypeError("DocumentSplitter expects a List of Documents as input.")
@@ -216,6 +232,9 @@ class DocumentSplitter:
216
232
  if self.split_by == "function" and self.splitting_function is not None:
217
233
  return self._split_by_function(doc)
218
234
 
235
+ if self.split_by == "token":
236
+ return self._split_by_token(doc)
237
+
219
238
  return self._split_by_character(doc)
220
239
 
221
240
  def _split_by_nltk_sentence(self, doc: Document) -> list[Document]:
@@ -243,6 +262,56 @@ class DocumentSplitter:
243
262
 
244
263
  return split_docs
245
264
 
265
+ def _split_by_token(self, doc: Document) -> list[Document]:
266
+ """
267
+ Split a document by token count using tiktoken.
268
+
269
+ Encodes the full document text to tokens, slices into chunks of `split_length` tokens
270
+ with `split_overlap` overlap, then decodes each chunk back to a string.
271
+ """
272
+ tokens = self._tiktoken_tokenizer.encode(doc.content) # type: ignore[union-attr, arg-type]
273
+ if not tokens:
274
+ if self.skip_empty_documents:
275
+ return []
276
+ metadata = deepcopy(doc.meta)
277
+ metadata["source_id"] = doc.id
278
+ return self._create_docs_from_splits(
279
+ text_splits=[""], splits_pages=[1], splits_start_idxs=[0], meta=metadata
280
+ )
281
+
282
+ step = self.split_length - self.split_overlap
283
+ full_text, offsets = self._tiktoken_tokenizer.decode_with_offsets(tokens) # type: ignore[union-attr]
284
+ offsets.append(len(full_text))
285
+
286
+ text_splits: list[str] = []
287
+ splits_pages: list[int] = []
288
+ splits_start_idxs: list[int] = []
289
+ cur_page = 1
290
+ prev_end = 0
291
+
292
+ for i in range(0, len(tokens), step):
293
+ chunk_token_count = min(self.split_length, len(tokens) - i)
294
+ chunk_start = offsets[i]
295
+ chunk_end = offsets[i + chunk_token_count]
296
+
297
+ if chunk_token_count < self.split_threshold and len(text_splits) > 0:
298
+ overlap_start = offsets[min(i + self.split_overlap, len(tokens))]
299
+ text_splits[-1] += full_text[overlap_start:chunk_end]
300
+ else:
301
+ text_splits.append(full_text[chunk_start:chunk_end])
302
+ splits_pages.append(cur_page)
303
+ splits_start_idxs.append(chunk_start)
304
+
305
+ non_overlap_end = offsets[min(i + step, len(tokens))]
306
+ cur_page += full_text[prev_end:non_overlap_end].count("\f")
307
+ prev_end = non_overlap_end
308
+
309
+ metadata = deepcopy(doc.meta)
310
+ metadata["source_id"] = doc.id
311
+ return self._create_docs_from_splits(
312
+ text_splits=text_splits, splits_pages=splits_pages, splits_start_idxs=splits_start_idxs, meta=metadata
313
+ )
314
+
246
315
  def _split_by_character(self, doc: Document) -> list[Document]:
247
316
  split_at = _CHARACTER_SPLIT_BY_MAPPING[self.split_by]
248
317
  units = doc.content.split(split_at) # type: ignore[union-attr]
@@ -422,6 +491,7 @@ class DocumentSplitter:
422
491
  use_split_rules=self.use_split_rules,
423
492
  extend_abbreviations=self.extend_abbreviations,
424
493
  skip_empty_documents=self.skip_empty_documents,
494
+ tokenizer_encoding=self.tokenizer_encoding,
425
495
  )
426
496
  if self.splitting_function:
427
497
  serialized["init_parameters"]["splitting_function"] = serialize_callable(self.splitting_function)
@@ -15,7 +15,7 @@ from haystack.core.serialization import (
15
15
  )
16
16
  from haystack.dataclasses import ChatMessage
17
17
  from haystack.hooks.compaction.types import Compactor
18
- from haystack.hooks.compaction.utils import _estimated_context_tokens, _last_assistant_index
18
+ from haystack.hooks.compaction.utils import _last_assistant_index
19
19
  from haystack.token_counters import ApproximateTokenCounter, TokenCounter
20
20
  from haystack.tools import ToolsType
21
21
  from haystack.utils.deserialization import deserialize_component_inplace
@@ -24,6 +24,32 @@ from haystack.utils.experimental import _experimental
24
24
  logger = logging.getLogger(__name__)
25
25
 
26
26
 
27
+ def _estimated_context_tokens(
28
+ messages: list[ChatMessage], context_tokens: int, token_counter: TokenCounter, tools: ToolsType | None = None
29
+ ) -> int:
30
+ """
31
+ Estimate the size of the whole conversation.
32
+
33
+ :param messages: The conversation, oldest to newest.
34
+ :param context_tokens: The `context_tokens` state key, anchored on the provider's own token counting. It accounts
35
+ for the conversation through the last assistant message, or for the whole conversation when there is none.
36
+ :param token_counter: The counter to measure the unaccounted messages with.
37
+ :param tools: Tools whose schemas are sent alongside the messages. These are counted when provider usage is absent.
38
+ :returns: The estimated total token count.
39
+ """
40
+ # Nothing sent yet, or a generator that reports no usage, so count everything.
41
+ if context_tokens == 0:
42
+ return token_counter.count(messages=messages, tools=tools)
43
+ # `context_tokens` accounts for the conversation through the last assistant message, so only the tool result
44
+ # messages after it still need estimating. If there is no assistant message, `context_tokens` accounts for the
45
+ # whole conversation, so nothing more needs counting.
46
+ last_assistant_index = _last_assistant_index(messages=messages)
47
+ if last_assistant_index < 0:
48
+ return context_tokens
49
+ tool_result_messages = messages[last_assistant_index + 1 :]
50
+ return context_tokens + token_counter.count(messages=tool_result_messages)
51
+
52
+
27
53
  @_experimental
28
54
  class CompactionHook:
29
55
  """
@@ -167,6 +193,8 @@ class CompactionHook:
167
193
  :returns: The target token amount the messages should be compacted to and the estimated non-message overhead,
168
194
  or None when the conversation is not yet large enough to compact.
169
195
  """
196
+ # Estimate the total context size, including the provider's own count of the conversation through the last
197
+ # assistant message and the tool schemas.
170
198
  estimated = _estimated_context_tokens(
171
199
  messages=messages, context_tokens=context_tokens, token_counter=self.token_counter, tools=tools
172
200
  )
@@ -237,12 +265,11 @@ class CompactionHook:
237
265
  # If the original value was 0, leave it unchanged so later steps keep recounting the full request locally.
238
266
  if original_context_tokens != 0:
239
267
  # Re-estimate the provider-accounted context through the last assistant message, including overhead. If we
240
- # added the trailing tool results, a second registered hook could double count them.
241
- state.set(
242
- "context_tokens",
243
- self.token_counter.count(messages=compacted[: _last_assistant_index(messages=compacted) + 1])
244
- + estimated_overhead,
245
- )
268
+ # added the trailing tool results, a second registered hook could double count them. If there is no
269
+ # assistant message, count everything.
270
+ last_assistant_index = _last_assistant_index(messages=compacted)
271
+ accounted = compacted if last_assistant_index < 0 else compacted[: last_assistant_index + 1]
272
+ state.set("context_tokens", self.token_counter.count(messages=accounted) + estimated_overhead)
246
273
  logger.debug(
247
274
  "Compacted the Agent's conversation at step {step} from {before} to {after} messages, targeting {target} "
248
275
  "tokens.",
@@ -3,8 +3,6 @@
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
5
  from haystack.dataclasses import ChatMessage, ChatRole
6
- from haystack.token_counters import TokenCounter
7
- from haystack.tools import ToolsType
8
6
 
9
7
  # Meta key marking a message that a compactor produced. Its value records which strategy ran.
10
8
  _COMPACTION_META_KEY = "context_compaction"
@@ -131,23 +129,3 @@ def _historical_turn_groups(messages: list[ChatMessage], system_end: int, task_i
131
129
  list(range(start, end))
132
130
  for start, end in _historical_turn_spans(messages=messages, start=system_end, end=historical_end)
133
131
  ]
134
-
135
-
136
- def _estimated_context_tokens(
137
- messages: list[ChatMessage], context_tokens: int, token_counter: TokenCounter, tools: ToolsType | None = None
138
- ) -> int:
139
- """
140
- Estimate the size of the whole conversation.
141
-
142
- :param messages: The conversation, oldest to newest.
143
- :param context_tokens: The `context_tokens` state key which is computed using the provider's own token counting.
144
- :param token_counter: The counter to measure the unaccounted messages with.
145
- :param tools: Tools whose schemas are sent alongside the messages. These are counted when provider usage is absent.
146
- :returns: The estimated total token count.
147
- """
148
- # Nothing sent yet, or a generator that reports no usage, so count everything.
149
- if context_tokens == 0:
150
- return token_counter.count(messages=messages, tools=tools)
151
- # Only need to estimate the tool result messages after the last assistant message
152
- tool_result_messages = messages[_last_assistant_index(messages=messages) + 1 :]
153
- return context_tokens + token_counter.count(messages=tool_result_messages)
@@ -243,8 +243,8 @@ class ToolResultOffloadHook:
243
243
 
244
244
  A message is left as-is when it is not a tool result, when the result is an error (including `before_tool`
245
245
  human-in-the-loop rejections), when it was already offloaded (e.g. another offload hook under `after_tool`
246
- handled it), when no policy applies, when the result is empty, when the result carries image or file content
247
- that `store` cannot store, or when the policy declines to offload.
246
+ handled it), when no policy applies, when the result is empty (no content, or nothing but empty text), when
247
+ the result carries image or file content that `store` cannot store, or when the policy declines to offload.
248
248
 
249
249
  Otherwise the result is written to `store` and the message is rebuilt with a pointer in place of the full
250
250
  result, preserving its origin and error flag and marking it offloaded. Each part of the result goes to its own
@@ -273,7 +273,9 @@ class ToolResultOffloadHook:
273
273
  content_blocks: list[TextContent | ImageContent | FileContent] = (
274
274
  [TextContent(text=result.result)] if isinstance(result.result, str) else list(result.result)
275
275
  )
276
- if not content_blocks:
276
+ # A result made up of nothing but empty text has nothing worth storing, so it stays in context. `all` also
277
+ # covers a result with no content blocks at all.
278
+ if all(isinstance(content_block, TextContent) and not content_block.text for content_block in content_blocks):
277
279
  return message
278
280
 
279
281
  # Check whether the store can store binary content before offloading an image or file result. A text-only store
@@ -1 +0,0 @@
1
- 3.2.0.dev20260904000310