Haystack 2.7.0
Release Notes
โจ Highlights
๐
Rework Pipeline.run() logic to better handle cycles
Pipeline.run() internal logic has been heavily reworked to be more robust and reliable than before. This new implementation makes it easier to run Pipelines that have cycles in their graph. It also fixes some corner cases in Pipelines that don’t have any cycle.
๐ Introduce LoggingTracer
With the new
LoggingTracer, users can inspect the logs in real-time to see everything that is happening in their Pipelines. This feature aims to improve the user experience during experimentation and prototyping.
import logging
from haystack import tracing
from haystack.tracing.logging_tracer import LoggingTracer
logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING)
logging.getLogger("haystack").setLevel(logging.DEBUG)
tracing.tracer.is_content_tracing_enabled = True # to enable tracing/logging content (inputs/outputs)
tracing.enable_tracing(LoggingTracer())
โฌ๏ธ Upgrade Notes
-
Removed
Pipelineinit argumentdebug_path. We do not support this anymore. -
Removed
Pipelineinit argumentmax_loops_allowed. Usemax_runs_per_componentinstead. -
Removed
PipelineMaxLoopsexception. UsePipelineMaxComponentRunsinstead. -
The deprecated default converter class
haystack.components.converters.pypdf.DefaultConverterused byPyPDFToDocumenthas been removed.Pipeline YAMLs from
haystack<2.7.0that use the default converter must be updated in the following manner:# Old components: Comp1: init_parameters: converter: type: haystack.components.converters.pypdf.DefaultConverter type: haystack.components.converters.pypdf.PyPDFToDocument # New components: Comp1: init_parameters: converter: null type: haystack.components.converters.pdf.PDFToTextConverterPipeline YAMLs from
haystack<2.7.0that use custom converter classes can be upgraded by simply loading them withhaystack==2.6.xand saving them to YAML again. -
Pipeline.connect()will now raise aPipelineConnectErrorifsenderandreceiverare the same Component. We do not support this use case anymore.
๐ New Features
-
Added component
StringJoinerto join strings from different components to a list of strings. -
Improved serialization/deserialization errors to provide extra context about the delinquent components when possible.
-
Enhanced DOCX converter to support table extraction in addition to paragraph content. The converter supports both CSV and Markdown table formats, providing flexible options for representing tabular data extracted from DOCX documents.
-
Added a new parameter
additional_mimetypesto the FileTypeRouter component. This allows users to specify additional MIME type mappings, ensuring correct file classification across different runtime environments and Python versions. -
Introduce a
LoggingTracer, that sends all traces to the logs.It can enabled as follows:
import logging from haystack import tracing from haystack.tracing.logging_tracer import LoggingTracer logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) logging.getLogger("haystack").setLevel(logging.DEBUG) tracing.tracer.is_content_tracing_enabled = True # to enable tracing/logging content (inputs/outputs) tracing.enable_tracing(LoggingTracer()) -
Fundamentally rework the internal logic of
Pipeline.run(). The rework makes it more reliable and covers more use cases. We fixed some issues that madePipelines with cycles unpredictable and with unclear Components execution order. -
Each tracing span of a component run is now attached with the pipeline run span object. This allows users to trace the execution of multiple pipeline runs concurrently.
โก๏ธ Enhancement Notes
- Add
streaming_callbackrun parameter toHuggingFaceAPIGeneratorandHuggingFaceLocalGeneratorto allow users to pass a callback function that will be called after each chunk of the response is generated. - The
SentenceWindowRetrievernow supports thewindow_sizeparameter at run time, overwriting the value set in the constructor. - Add output type validation in
ConditionalRouter. Settingvalidate_output_typetoTruewill enable a check to verify if the actual output of a route returns the declared type. If it doesn’t match aValueErroris raised. - Reduced
numpyusage to speed up imports. - Improved file type detection in
FileTypeRouter, particularly for Microsoft Office file formats like .docx and .pptx. This enhancement ensures more consistent behavior across different environments, including AWS Lambda functions and systems without pre-installed office suites. - The
FiletypeRouternow supports passing metadata (meta) in therunmethod. When metadata is provided, the sources are internally converted toByteStreamobjects and the metadata is added. This new parameter simplifies working with preprocessing/indexing pipelines. SentenceTransformersDocumentEmbeddernow supportsconfig_kwargsfor additional parameters when loading the model configurationSentenceTransformersTextEmbeddernow supportsconfig_kwargsfor additional parameters when loading the model configuration- Previously,
numpywas pinned to<2.0to avoid compatibility issues in several core integrations. This pin has been removed, and haystack can work with bothnumpy1.xand2.x. If necessary, we will pinnumpyversion in specific core integrations that require it.
โ ๏ธ Deprecation Notes
- The
DefaultConverterclass used by thePyPDFToDocumentcomponent has been deprecated. Its functionality will be merged into the component in 2.7.0.
๐ Bug Fixes
- Serialized data of components are now explicitly enforced to be one of the following basic Python datatypes:
str,int,float,bool,list,dict,set,tupleorNone. - Addressed an issue where certain file types (e.g., .docx, .pptx) were incorrectly classified as ‘unclassified’ in environments with limited MIME type definitions, such as AWS Lambda functions.
- Fixes logs containing JSON data getting lost due to string interpolation.
- Use forward references for Hugging Face Hub types in the
HuggingFaceAPIGeneratorcomponent to prevent import errors. - Fix the serialization of
PyPDFToDocumentcomponent to prevent the default converter from being serialized unnecessarily. - Revert change to
PyPDFConverterthat broke the deserialization of pre2.6.0YAMLs.