Source code for langchain_community.document_transformers.long_context_reorder

"""Reorder documents"""
from typing import Any, List, Sequence

from langchain_core.documents import BaseDocumentTransformer, Document
from langchain_core.pydantic_v1 import BaseModel

def _litm_reordering(documents: List[Document]) -> List[Document]:
    """Lost in the middle reorder: the less relevant documents will be at the
    middle of the list and more relevant elements at beginning / end.

    reordered_result = []
    for i, value in enumerate(documents):
        if i % 2 == 1:
            reordered_result.insert(0, value)
    return reordered_result

[docs]class LongContextReorder(BaseDocumentTransformer, BaseModel): """Reorder long context. Lost in the middle: Performance degrades when models must access relevant information in the middle of long contexts. See:""" class Config: """Configuration for this pydantic object.""" arbitrary_types_allowed = True
[docs] def transform_documents( self, documents: Sequence[Document], **kwargs: Any ) -> Sequence[Document]: """Reorders documents.""" return _litm_reordering(list(documents))
[docs] async def atransform_documents( self, documents: Sequence[Document], **kwargs: Any ) -> Sequence[Document]: raise NotImplementedError