haystack-ai 2.2.3__tar.gz → 2.2.4__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 (194) hide show
  1. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/PKG-INFO +1 -1
  2. haystack_ai-2.2.4/VERSION.txt +1 -0
  3. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/azure.py +2 -1
  4. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/bm25_retriever.py +16 -4
  5. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/embedding_retriever.py +11 -3
  6. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/base.py +6 -1
  7. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/pipeline.py +14 -5
  8. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/types/__init__.py +2 -1
  9. haystack_ai-2.2.4/haystack/document_stores/types/filter_policy.py +61 -0
  10. haystack_ai-2.2.3/VERSION.txt +0 -1
  11. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/.gitignore +0 -0
  12. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/LICENSE +0 -0
  13. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/README.md +0 -0
  14. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/__init__.py +0 -0
  15. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/__init__.py +0 -0
  16. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/audio/__init__.py +0 -0
  17. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/audio/whisper_local.py +0 -0
  18. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/audio/whisper_remote.py +0 -0
  19. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/__init__.py +0 -0
  20. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/answer_builder.py +0 -0
  21. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/chat_prompt_builder.py +0 -0
  22. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/dynamic_chat_prompt_builder.py +0 -0
  23. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/dynamic_prompt_builder.py +0 -0
  24. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/prompt_builder.py +0 -0
  25. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/caching/__init__.py +0 -0
  26. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/caching/cache_checker.py +0 -0
  27. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/classifiers/__init__.py +0 -0
  28. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/classifiers/document_language_classifier.py +0 -0
  29. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/connectors/__init__.py +0 -0
  30. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/connectors/openapi_service.py +0 -0
  31. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/__init__.py +0 -0
  32. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/html.py +0 -0
  33. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/markdown.py +0 -0
  34. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/openapi_functions.py +0 -0
  35. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/output_adapter.py +0 -0
  36. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/pdfminer.py +0 -0
  37. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/pypdf.py +0 -0
  38. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/tika.py +0 -0
  39. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/txt.py +0 -0
  40. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/utils.py +0 -0
  41. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/__init__.py +0 -0
  42. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/azure_document_embedder.py +0 -0
  43. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/azure_text_embedder.py +0 -0
  44. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/backends/__init__.py +0 -0
  45. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/backends/sentence_transformers_backend.py +0 -0
  46. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_api_document_embedder.py +0 -0
  47. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_api_text_embedder.py +0 -0
  48. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_tei_document_embedder.py +0 -0
  49. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_tei_text_embedder.py +0 -0
  50. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/openai_document_embedder.py +0 -0
  51. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/openai_text_embedder.py +0 -0
  52. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/sentence_transformers_document_embedder.py +0 -0
  53. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/sentence_transformers_text_embedder.py +0 -0
  54. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/__init__.py +0 -0
  55. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/answer_exact_match.py +0 -0
  56. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/context_relevance.py +0 -0
  57. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/document_map.py +0 -0
  58. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/document_mrr.py +0 -0
  59. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/document_recall.py +0 -0
  60. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/faithfulness.py +0 -0
  61. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/llm_evaluator.py +0 -0
  62. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/sas_evaluator.py +0 -0
  63. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/extractors/__init__.py +0 -0
  64. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/extractors/named_entity_extractor.py +0 -0
  65. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/fetchers/__init__.py +0 -0
  66. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/fetchers/link_content.py +0 -0
  67. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/__init__.py +0 -0
  68. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/azure.py +0 -0
  69. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/__init__.py +0 -0
  70. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/azure.py +0 -0
  71. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_api.py +0 -0
  72. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_local.py +0 -0
  73. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_tgi.py +0 -0
  74. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/openai.py +0 -0
  75. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_api.py +0 -0
  76. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_local.py +0 -0
  77. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_tgi.py +0 -0
  78. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/openai.py +0 -0
  79. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/utils.py +0 -0
  80. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/joiners/__init__.py +0 -0
  81. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/joiners/branch.py +0 -0
  82. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/joiners/document_joiner.py +0 -0
  83. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/others/__init__.py +0 -0
  84. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/others/multiplexer.py +0 -0
  85. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/__init__.py +0 -0
  86. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/document_cleaner.py +0 -0
  87. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/document_splitter.py +0 -0
  88. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/text_cleaner.py +0 -0
  89. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/__init__.py +0 -0
  90. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/lost_in_the_middle.py +0 -0
  91. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/meta_field.py +0 -0
  92. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/sentence_transformers_diversity.py +0 -0
  93. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/transformers_similarity.py +0 -0
  94. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/readers/__init__.py +0 -0
  95. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/readers/extractive.py +0 -0
  96. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/__init__.py +0 -0
  97. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/filter_retriever.py +0 -0
  98. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/__init__.py +0 -0
  99. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/__init__.py +0 -0
  100. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/conditional_router.py +0 -0
  101. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/file_type_router.py +0 -0
  102. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/metadata_router.py +0 -0
  103. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/text_language_router.py +0 -0
  104. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/zero_shot_text_router.py +0 -0
  105. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/samplers/__init__.py +0 -0
  106. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/samplers/top_p.py +0 -0
  107. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/validators/__init__.py +0 -0
  108. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/validators/json_schema.py +0 -0
  109. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/websearch/__init__.py +0 -0
  110. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/websearch/searchapi.py +0 -0
  111. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/websearch/serper_dev.py +0 -0
  112. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/writers/__init__.py +0 -0
  113. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/writers/document_writer.py +0 -0
  114. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/__init__.py +0 -0
  115. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/__init__.py +0 -0
  116. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/component.py +0 -0
  117. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/sockets.py +0 -0
  118. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/types.py +0 -0
  119. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/errors.py +0 -0
  120. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/__init__.py +0 -0
  121. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/descriptions.py +0 -0
  122. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/draw.py +0 -0
  123. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/chat_with_website.yaml.jinja2 +0 -0
  124. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/generative_qa.yaml.jinja2 +0 -0
  125. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/indexing.yaml.jinja2 +0 -0
  126. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/rag.yaml.jinja2 +0 -0
  127. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/template.py +0 -0
  128. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/utils.py +0 -0
  129. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/serialization.py +0 -0
  130. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/type_utils.py +0 -0
  131. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/__init__.py +0 -0
  132. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/answer.py +0 -0
  133. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/byte_stream.py +0 -0
  134. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/chat_message.py +0 -0
  135. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/document.py +0 -0
  136. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/sparse_embedding.py +0 -0
  137. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/streaming_chunk.py +0 -0
  138. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/__init__.py +0 -0
  139. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/errors/__init__.py +0 -0
  140. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/errors/errors.py +0 -0
  141. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/in_memory/__init__.py +0 -0
  142. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/in_memory/document_store.py +0 -0
  143. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/types/policy.py +0 -0
  144. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/types/protocol.py +0 -0
  145. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/errors.py +0 -0
  146. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/evaluation/__init__.py +0 -0
  147. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/evaluation/eval_run_result.py +0 -0
  148. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/lazy_imports.py +0 -0
  149. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/logging.py +0 -0
  150. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/marshal/__init__.py +0 -0
  151. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/marshal/protocol.py +0 -0
  152. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/marshal/yaml.py +0 -0
  153. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/telemetry/__init__.py +0 -0
  154. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/telemetry/_environment.py +0 -0
  155. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/telemetry/_telemetry.py +0 -0
  156. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/__init__.py +0 -0
  157. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/document_store.py +0 -0
  158. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/factory.py +0 -0
  159. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/__init__.py +0 -0
  160. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/accumulate.py +0 -0
  161. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/add_value.py +0 -0
  162. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/concatenate.py +0 -0
  163. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/double.py +0 -0
  164. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/fstring.py +0 -0
  165. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/greet.py +0 -0
  166. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/hello.py +0 -0
  167. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/joiner.py +0 -0
  168. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/parity.py +0 -0
  169. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/remainder.py +0 -0
  170. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/repeat.py +0 -0
  171. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/self_loop.py +0 -0
  172. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/subtract.py +0 -0
  173. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/sum.py +0 -0
  174. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/text_splitter.py +0 -0
  175. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/threshold.py +0 -0
  176. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/test_utils.py +0 -0
  177. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/__init__.py +0 -0
  178. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/datadog.py +0 -0
  179. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/opentelemetry.py +0 -0
  180. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/tracer.py +0 -0
  181. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/utils.py +0 -0
  182. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/__init__.py +0 -0
  183. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/auth.py +0 -0
  184. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/callable_serialization.py +0 -0
  185. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/device.py +0 -0
  186. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/expit.py +0 -0
  187. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/filters.py +0 -0
  188. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/hf.py +0 -0
  189. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/jupyter.py +0 -0
  190. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/requests_utils.py +0 -0
  191. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/type_serialization.py +0 -0
  192. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/url_validation.py +0 -0
  193. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/version.py +0 -0
  194. {haystack_ai-2.2.3 → haystack_ai-2.2.4}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: haystack-ai
3
- Version: 2.2.3
3
+ Version: 2.2.4
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
+ 2.2.4
@@ -135,7 +135,8 @@ class AzureOCRDocumentConverter:
135
135
  result = poller.result()
136
136
  azure_output.append(result.to_dict())
137
137
 
138
- docs = self._convert_tables_and_text(result=result, meta=metadata)
138
+ merged_metadata = {**bytestream.meta, **metadata}
139
+ docs = self._convert_tables_and_text(result=result, meta=merged_metadata)
139
140
  documents.extend(docs)
140
141
 
141
142
  return {"documents": documents, "raw_azure_response": azure_output}
@@ -6,6 +6,7 @@ from typing import Any, Dict, List, Optional
6
6
 
7
7
  from haystack import DeserializationError, Document, component, default_from_dict, default_to_dict
8
8
  from haystack.document_stores.in_memory import InMemoryDocumentStore
9
+ from haystack.document_stores.types import FilterPolicy
9
10
 
10
11
 
11
12
  @component
@@ -40,6 +41,7 @@ class InMemoryBM25Retriever:
40
41
  filters: Optional[Dict[str, Any]] = None,
41
42
  top_k: int = 10,
42
43
  scale_score: bool = False,
44
+ filter_policy: FilterPolicy = FilterPolicy.REPLACE,
43
45
  ):
44
46
  """
45
47
  Create the InMemoryBM25Retriever component.
@@ -52,7 +54,7 @@ class InMemoryBM25Retriever:
52
54
  The maximum number of documents to retrieve.
53
55
  :param scale_score:
54
56
  Scales the BM25 score to a unit interval in the range of 0 to 1, where 1 means extremely relevant. If set to `False`, uses raw similarity scores.
55
-
57
+ :param filter_policy: The filter policy to apply during retrieval.
56
58
  :raises ValueError:
57
59
  If the specified `top_k` is not > 0.
58
60
  """
@@ -67,6 +69,7 @@ class InMemoryBM25Retriever:
67
69
  self.filters = filters
68
70
  self.top_k = top_k
69
71
  self.scale_score = scale_score
72
+ self.filter_policy = filter_policy
70
73
 
71
74
  def _get_telemetry_data(self) -> Dict[str, Any]:
72
75
  """
@@ -83,7 +86,12 @@ class InMemoryBM25Retriever:
83
86
  """
84
87
  docstore = self.document_store.to_dict()
85
88
  return default_to_dict(
86
- self, document_store=docstore, filters=self.filters, top_k=self.top_k, scale_score=self.scale_score
89
+ self,
90
+ document_store=docstore,
91
+ filters=self.filters,
92
+ top_k=self.top_k,
93
+ scale_score=self.scale_score,
94
+ filter_policy=self.filter_policy.value,
87
95
  )
88
96
 
89
97
  @classmethod
@@ -101,6 +109,8 @@ class InMemoryBM25Retriever:
101
109
  raise DeserializationError("Missing 'document_store' in serialization data")
102
110
  if "type" not in init_params["document_store"]:
103
111
  raise DeserializationError("Missing 'type' in document store's serialization data")
112
+ if "filter_policy" in init_params:
113
+ init_params["filter_policy"] = FilterPolicy.from_str(init_params["filter_policy"])
104
114
  data["init_parameters"]["document_store"] = InMemoryDocumentStore.from_dict(
105
115
  data["init_parameters"]["document_store"]
106
116
  )
@@ -132,8 +142,10 @@ class InMemoryBM25Retriever:
132
142
  :raises ValueError:
133
143
  If the specified DocumentStore is not found or is not a InMemoryDocumentStore instance.
134
144
  """
135
- if filters is None:
136
- filters = self.filters
145
+ if self.filter_policy == FilterPolicy.MERGE and filters:
146
+ filters = {**(self.filters or {}), **filters}
147
+ else:
148
+ filters = filters or self.filters
137
149
  if top_k is None:
138
150
  top_k = self.top_k
139
151
  if scale_score is None:
@@ -6,6 +6,7 @@ from typing import Any, Dict, List, Optional
6
6
 
7
7
  from haystack import DeserializationError, Document, component, default_from_dict, default_to_dict
8
8
  from haystack.document_stores.in_memory import InMemoryDocumentStore
9
+ from haystack.document_stores.types import FilterPolicy
9
10
 
10
11
 
11
12
  @component
@@ -50,6 +51,7 @@ class InMemoryEmbeddingRetriever:
50
51
  top_k: int = 10,
51
52
  scale_score: bool = False,
52
53
  return_embedding: bool = False,
54
+ filter_policy: FilterPolicy = FilterPolicy.REPLACE,
53
55
  ):
54
56
  """
55
57
  Create the InMemoryEmbeddingRetriever component.
@@ -64,7 +66,7 @@ class InMemoryEmbeddingRetriever:
64
66
  Scales the BM25 score to a unit interval in the range of 0 to 1, where 1 means extremely relevant. If set to `False`, uses raw similarity scores.
65
67
  :param return_embedding:
66
68
  Whether to return the embedding of the retrieved Documents.
67
-
69
+ :param filter_policy: The filter policy to apply during retrieval.
68
70
  :raises ValueError:
69
71
  If the specified top_k is not > 0.
70
72
  """
@@ -80,6 +82,7 @@ class InMemoryEmbeddingRetriever:
80
82
  self.top_k = top_k
81
83
  self.scale_score = scale_score
82
84
  self.return_embedding = return_embedding
85
+ self.filter_policy = filter_policy
83
86
 
84
87
  def _get_telemetry_data(self) -> Dict[str, Any]:
85
88
  """
@@ -102,6 +105,7 @@ class InMemoryEmbeddingRetriever:
102
105
  top_k=self.top_k,
103
106
  scale_score=self.scale_score,
104
107
  return_embedding=self.return_embedding,
108
+ filter_policy=self.filter_policy.value,
105
109
  )
106
110
 
107
111
  @classmethod
@@ -119,6 +123,8 @@ class InMemoryEmbeddingRetriever:
119
123
  raise DeserializationError("Missing 'document_store' in serialization data")
120
124
  if "type" not in init_params["document_store"]:
121
125
  raise DeserializationError("Missing 'type' in document store's serialization data")
126
+ if "filter_policy" in init_params:
127
+ init_params["filter_policy"] = FilterPolicy.from_str(init_params["filter_policy"])
122
128
  data["init_parameters"]["document_store"] = InMemoryDocumentStore.from_dict(
123
129
  data["init_parameters"]["document_store"]
124
130
  )
@@ -153,8 +159,10 @@ class InMemoryEmbeddingRetriever:
153
159
  :raises ValueError:
154
160
  If the specified DocumentStore is not found or is not an InMemoryDocumentStore instance.
155
161
  """
156
- if filters is None:
157
- filters = self.filters
162
+ if self.filter_policy == FilterPolicy.MERGE and filters:
163
+ filters = {**(self.filters or {}), **filters}
164
+ else:
165
+ filters = filters or self.filters
158
166
  if top_k is None:
159
167
  top_k = self.top_k
160
168
  if scale_score is None:
@@ -719,7 +719,7 @@ class PipelineBase:
719
719
 
720
720
  return {**data}
721
721
 
722
- def _init_to_run(self) -> List[Tuple[str, Component]]:
722
+ def _init_to_run(self, pipeline_inputs: Dict[str, Any]) -> List[Tuple[str, Component]]:
723
723
  to_run: List[Tuple[str, Component]] = []
724
724
  for node_name in self.graph.nodes:
725
725
  component = self.graph.nodes[node_name]["instance"]
@@ -729,6 +729,11 @@ class PipelineBase:
729
729
  to_run.append((node_name, component))
730
730
  continue
731
731
 
732
+ if node_name in pipeline_inputs:
733
+ # This component is in the input data, if it has enough inputs it can run right away
734
+ to_run.append((node_name, component))
735
+ continue
736
+
732
737
  for socket in component.__haystack_input__._sockets_dict.values():
733
738
  if not socket.senders or socket.is_variadic:
734
739
  # Component has at least one input not connected or is variadic, can run right away.
@@ -112,9 +112,12 @@ class Pipeline(PipelineBase):
112
112
  # Initialize the inputs state
113
113
  last_inputs: Dict[str, Dict[str, Any]] = self._init_inputs_state(data)
114
114
 
115
- # Take all components that have at least 1 input not connected or is variadic,
116
- # and all components that have no inputs at all
117
- to_run: List[Tuple[str, Component]] = self._init_to_run()
115
+ # Take all components that:
116
+ # - have no inputs
117
+ # - receive input from the user
118
+ # - have at least one input not connected
119
+ # - have at least one input that is variadic
120
+ to_run: List[Tuple[str, Component]] = self._init_to_run(data)
118
121
 
119
122
  # These variables are used to detect when we're stuck in a loop.
120
123
  # Stuck loops can happen when one or more components are waiting for input but
@@ -232,8 +235,15 @@ class Pipeline(PipelineBase):
232
235
  if name != sender_component_name:
233
236
  continue
234
237
 
238
+ pair = (receiver_component_name, self.graph.nodes[receiver_component_name]["instance"])
235
239
  if edge_data["from_socket"].name not in res:
236
- # This output has not been produced by the component, skip it
240
+ # The component didn't produce any output for this socket.
241
+ # We can't run the receiver, let's remove it from the list of components to run
242
+ # or we risk running it if it's in those lists.
243
+ if pair in to_run:
244
+ to_run.remove(pair)
245
+ if pair in waiting_for_input:
246
+ waiting_for_input.remove(pair)
237
247
  continue
238
248
 
239
249
  if receiver_component_name not in last_inputs:
@@ -249,7 +259,6 @@ class Pipeline(PipelineBase):
249
259
  else:
250
260
  last_inputs[receiver_component_name][edge_data["to_socket"].name] = value
251
261
 
252
- pair = (receiver_component_name, self.graph.nodes[receiver_component_name]["instance"])
253
262
  is_greedy = pair[1].__haystack_is_greedy__
254
263
  is_variadic = edge_data["to_socket"].is_variadic
255
264
  if is_variadic and is_greedy:
@@ -2,7 +2,8 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
+ from .filter_policy import FilterPolicy
5
6
  from .policy import DuplicatePolicy
6
7
  from .protocol import DocumentStore
7
8
 
8
- __all__ = ["DocumentStore", "DuplicatePolicy"]
9
+ __all__ = ["DocumentStore", "DuplicatePolicy", "FilterPolicy"]
@@ -0,0 +1,61 @@
1
+ # SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from enum import Enum
6
+ from typing import Any, Dict, Optional
7
+
8
+
9
+ class FilterPolicy(Enum):
10
+ """
11
+ Policy to determine how filters are applied in retrievers interacting with document stores.
12
+ """
13
+
14
+ # Runtime filters replace init filters during retriever run invocation.
15
+ REPLACE = "replace"
16
+
17
+ # Runtime filters are merged with init filters, with runtime filters overwriting init values.
18
+ MERGE = "merge"
19
+
20
+ def __str__(self):
21
+ return self.value
22
+
23
+ @staticmethod
24
+ def from_str(filter_policy: str) -> "FilterPolicy":
25
+ """
26
+ Convert a string to a FilterPolicy enum.
27
+
28
+ :param filter_policy: The string to convert.
29
+ :return: The corresponding FilterPolicy enum.
30
+ """
31
+ enum_map = {e.value: e for e in FilterPolicy}
32
+ policy = enum_map.get(filter_policy)
33
+ if policy is None:
34
+ msg = f"Unknown FilterPolicy type '{filter_policy}'. Supported types are: {list(enum_map.keys())}"
35
+ raise ValueError(msg)
36
+ return policy
37
+
38
+
39
+ def apply_filter_policy(
40
+ filter_policy: FilterPolicy,
41
+ init_filters: Optional[Dict[str, Any]] = None,
42
+ runtime_filters: Optional[Dict[str, Any]] = None,
43
+ ) -> Optional[Dict[str, Any]]:
44
+ """
45
+ Apply the filter policy to the given initial and runtime filters to determine the final set of filters used.
46
+
47
+ The function combines or replaces the initial and runtime filters based on the specified filter policy.
48
+
49
+ :param filter_policy: The policy to apply when handling the filters. It can be one of the following:
50
+ - `FilterPolicy.REPLACE`: Runtime filters will replace the initial filters.
51
+ - `FilterPolicy.MERGE`: Runtime filters will be merged with the initial filters. If there are overlapping keys,
52
+ values from the runtime filters will overwrite those from the initial filters.
53
+ :param init_filters: The initial filters set during the initialization of the relevant retriever.
54
+ :param runtime_filters: The filters provided at runtime, usually during a query operation execution. These filters
55
+ can change for each query/retreiver run invocation.
56
+ :returns: A dictionary containing the resulting filters based on the provided policy.
57
+ """
58
+ if filter_policy == FilterPolicy.MERGE and runtime_filters:
59
+ return {**(init_filters or {}), **runtime_filters}
60
+ else:
61
+ return runtime_filters or init_filters
@@ -1 +0,0 @@
1
- 2.2.3
File without changes
File without changes
File without changes
File without changes