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.
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/PKG-INFO +1 -1
- haystack_ai-2.2.4/VERSION.txt +1 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/azure.py +2 -1
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/bm25_retriever.py +16 -4
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/embedding_retriever.py +11 -3
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/base.py +6 -1
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/pipeline.py +14 -5
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/types/__init__.py +2 -1
- haystack_ai-2.2.4/haystack/document_stores/types/filter_policy.py +61 -0
- haystack_ai-2.2.3/VERSION.txt +0 -1
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/.gitignore +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/LICENSE +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/README.md +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/audio/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/audio/whisper_local.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/audio/whisper_remote.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/answer_builder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/chat_prompt_builder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/dynamic_chat_prompt_builder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/dynamic_prompt_builder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/prompt_builder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/caching/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/caching/cache_checker.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/classifiers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/classifiers/document_language_classifier.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/connectors/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/connectors/openapi_service.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/html.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/markdown.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/openapi_functions.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/output_adapter.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/pdfminer.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/pypdf.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/tika.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/txt.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/converters/utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/azure_document_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/azure_text_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/backends/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/backends/sentence_transformers_backend.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_api_document_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_api_text_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_tei_document_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/hugging_face_tei_text_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/openai_document_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/openai_text_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/sentence_transformers_document_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/sentence_transformers_text_embedder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/answer_exact_match.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/context_relevance.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/document_map.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/document_mrr.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/document_recall.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/faithfulness.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/llm_evaluator.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/sas_evaluator.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/extractors/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/extractors/named_entity_extractor.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/fetchers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/fetchers/link_content.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/azure.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/azure.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_api.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_local.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_tgi.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/openai.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_api.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_local.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_tgi.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/openai.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/joiners/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/joiners/branch.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/joiners/document_joiner.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/others/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/others/multiplexer.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/document_cleaner.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/document_splitter.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/text_cleaner.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/lost_in_the_middle.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/meta_field.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/sentence_transformers_diversity.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/transformers_similarity.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/readers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/readers/extractive.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/filter_retriever.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/conditional_router.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/file_type_router.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/metadata_router.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/text_language_router.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/zero_shot_text_router.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/samplers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/samplers/top_p.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/validators/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/validators/json_schema.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/websearch/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/websearch/searchapi.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/websearch/serper_dev.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/writers/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/writers/document_writer.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/component.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/sockets.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/component/types.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/errors.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/descriptions.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/draw.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/chat_with_website.yaml.jinja2 +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/generative_qa.yaml.jinja2 +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/indexing.yaml.jinja2 +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/rag.yaml.jinja2 +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/template.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/serialization.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/type_utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/answer.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/byte_stream.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/chat_message.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/document.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/sparse_embedding.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/dataclasses/streaming_chunk.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/errors/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/errors/errors.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/in_memory/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/in_memory/document_store.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/types/policy.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/types/protocol.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/errors.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/evaluation/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/evaluation/eval_run_result.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/lazy_imports.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/logging.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/marshal/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/marshal/protocol.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/marshal/yaml.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/telemetry/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/telemetry/_environment.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/telemetry/_telemetry.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/document_store.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/factory.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/accumulate.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/add_value.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/concatenate.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/double.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/fstring.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/greet.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/hello.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/joiner.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/parity.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/remainder.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/repeat.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/self_loop.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/subtract.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/sum.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/text_splitter.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/sample_components/threshold.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/testing/test_utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/datadog.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/opentelemetry.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/tracer.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/tracing/utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/__init__.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/auth.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/callable_serialization.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/device.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/expit.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/filters.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/hf.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/jupyter.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/requests_utils.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/type_serialization.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/utils/url_validation.py +0 -0
- {haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/version.py +0 -0
- {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
|
+
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
|
-
|
|
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}
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/bm25_retriever.py
RENAMED
|
@@ -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,
|
|
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
|
|
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
|
|
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
|
|
116
|
-
#
|
|
117
|
-
|
|
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
|
-
#
|
|
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
|
haystack_ai-2.2.3/VERSION.txt
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.2.3
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/dynamic_chat_prompt_builder.py
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/builders/dynamic_prompt_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/azure_document_embedder.py
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/azure_text_embedder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/openai_document_embedder.py
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/embedders/openai_text_embedder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/evaluators/answer_exact_match.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/extractors/named_entity_extractor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_api.py
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_local.py
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/chat/hugging_face_tgi.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/generators/hugging_face_local.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/document_cleaner.py
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/preprocessors/document_splitter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/rankers/transformers_similarity.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/retrievers/in_memory/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/components/routers/zero_shot_text_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/generative_qa.yaml.jinja2
RENAMED
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/core/pipeline/predefined/indexing.yaml.jinja2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ai-2.2.3 → haystack_ai-2.2.4}/haystack/document_stores/in_memory/document_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|