[docs]classDocumentCompressorPipeline(BaseDocumentCompressor):"""Document compressor that uses a pipeline of Transformers."""transformers:List[Union[BaseDocumentTransformer,BaseDocumentCompressor]]"""List of document filters that are chained together and run in sequence."""model_config=ConfigDict(arbitrary_types_allowed=True,)
[docs]defcompress_documents(self,documents:Sequence[Document],query:str,callbacks:Optional[Callbacks]=None,)->Sequence[Document]:"""Transform a list of documents."""for_transformerinself.transformers:ifisinstance(_transformer,BaseDocumentCompressor):accepts_callbacks=(signature(_transformer.compress_documents).parameters.get("callbacks")isnotNone)ifaccepts_callbacks:documents=_transformer.compress_documents(documents,query,callbacks=callbacks)else:documents=_transformer.compress_documents(documents,query)elifisinstance(_transformer,BaseDocumentTransformer):documents=_transformer.transform_documents(documents)else:raiseValueError(f"Got unexpected transformer type: {_transformer}")returndocuments
[docs]asyncdefacompress_documents(self,documents:Sequence[Document],query:str,callbacks:Optional[Callbacks]=None,)->Sequence[Document]:"""Compress retrieved documents given the query context."""for_transformerinself.transformers:ifisinstance(_transformer,BaseDocumentCompressor):accepts_callbacks=(signature(_transformer.acompress_documents).parameters.get("callbacks")isnotNone)ifaccepts_callbacks:documents=await_transformer.acompress_documents(documents,query,callbacks=callbacks)else:documents=await_transformer.acompress_documents(documents,query)elifisinstance(_transformer,BaseDocumentTransformer):documents=await_transformer.atransform_documents(documents)else:raiseValueError(f"Got unexpected transformer type: {_transformer}")returndocuments