Home / File/ mapreduce.py — langchain Source File

mapreduce.py — langchain Source File

Architecture documentation for mapreduce.py, a python file in the langchain codebase. 15 imports, 0 dependents.

Entity Profile

Dependency Diagram

graph LR
  2b877f61_7216_3d99_402d_5c7078ad6783["mapreduce.py"]
  2bf6d401_816d_d011_3b05_a6114f55ff58["collections.abc"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 2bf6d401_816d_d011_3b05_a6114f55ff58
  feec1ec4_6917_867b_d228_b134d0ff8099["typing"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> feec1ec4_6917_867b_d228_b134d0ff8099
  2485b66a_3839_d0b6_ad9c_a4ff40457dc6["langchain_core._api"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 2485b66a_3839_d0b6_ad9c_a4ff40457dc6
  17a62cb3_fefd_6320_b757_b53bb4a1c661["langchain_core.callbacks"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 17a62cb3_fefd_6320_b757_b53bb4a1c661
  6a98b0a5_5607_0043_2e22_a46a464c2d62["langchain_core.documents"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 6a98b0a5_5607_0043_2e22_a46a464c2d62
  e929cf21_6ab8_6ff3_3765_0d35a099a053["langchain_core.language_models"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> e929cf21_6ab8_6ff3_3765_0d35a099a053
  435e49bf_bb2e_2016_ead7_0afb9d57ad71["langchain_core.prompts"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 435e49bf_bb2e_2016_ead7_0afb9d57ad71
  7c6676be_7003_53c4_f08f_05a4d67a1cee["langchain_text_splitters"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 7c6676be_7003_53c4_f08f_05a4d67a1cee
  dd5e7909_a646_84f1_497b_cae69735550e["pydantic"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> dd5e7909_a646_84f1_497b_cae69735550e
  b3ba1570_8ee5_0263_3e06_a05d8e20d456["langchain_classic.chains"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> b3ba1570_8ee5_0263_3e06_a05d8e20d456
  9a0fc770_8c3f_14bc_3c7d_37852927778e["langchain_classic.chains.base"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> 9a0fc770_8c3f_14bc_3c7d_37852927778e
  f40facfc_f3e4_c00f_e491_0760270cea61["langchain_classic.chains.combine_documents.base"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> f40facfc_f3e4_c00f_e491_0760270cea61
  a95ae8ee_59d8_73de_6527_20baaa188ab2["langchain_classic.chains.combine_documents.map_reduce"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> a95ae8ee_59d8_73de_6527_20baaa188ab2
  cf026402_2980_66ad_1656_49f205954349["langchain_classic.chains.combine_documents.stuff"]
  2b877f61_7216_3d99_402d_5c7078ad6783 --> cf026402_2980_66ad_1656_49f205954349
  style 2b877f61_7216_3d99_402d_5c7078ad6783 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Map-reduce chain.

Splits up a document, sends the smaller parts to the LLM with one prompt,
then combines the results with another one.
"""

from __future__ import annotations

from collections.abc import Mapping
from typing import Any

from langchain_core._api import deprecated
from langchain_core.callbacks import CallbackManagerForChainRun, Callbacks
from langchain_core.documents import Document
from langchain_core.language_models import BaseLanguageModel
from langchain_core.prompts import BasePromptTemplate
from langchain_text_splitters import TextSplitter
from pydantic import ConfigDict

from langchain_classic.chains import ReduceDocumentsChain
from langchain_classic.chains.base import Chain
from langchain_classic.chains.combine_documents.base import BaseCombineDocumentsChain
from langchain_classic.chains.combine_documents.map_reduce import (
    MapReduceDocumentsChain,
)
from langchain_classic.chains.combine_documents.stuff import StuffDocumentsChain
from langchain_classic.chains.llm import LLMChain


@deprecated(
    since="0.2.13",
    removal="1.0",
    message=(
        "Refer to migration guide here for a recommended implementation using "
        "LangGraph: https://docs.langchain.com/oss/python/langgraph/graph-api#map-reduce-and-the-send-api"
        "."
    ),
)
class MapReduceChain(Chain):
    """Map-reduce chain."""

    combine_documents_chain: BaseCombineDocumentsChain
    """Chain to use to combine documents."""
    text_splitter: TextSplitter
    """Text splitter to use."""
    input_key: str = "input_text"
    output_key: str = "output_text"

    @classmethod
    def from_params(
        cls,
        llm: BaseLanguageModel,
        prompt: BasePromptTemplate,
        text_splitter: TextSplitter,
        callbacks: Callbacks = None,
        combine_chain_kwargs: Mapping[str, Any] | None = None,
        reduce_chain_kwargs: Mapping[str, Any] | None = None,
        **kwargs: Any,
    ) -> MapReduceChain:
        """Construct a map-reduce chain that uses the chain for map and reduce."""
        llm_chain = LLMChain(llm=llm, prompt=prompt, callbacks=callbacks)
        stuff_chain = StuffDocumentsChain(
            llm_chain=llm_chain,
            callbacks=callbacks,
            **(reduce_chain_kwargs or {}),
        )
        reduce_documents_chain = ReduceDocumentsChain(
            combine_documents_chain=stuff_chain,
        )
        combine_documents_chain = MapReduceDocumentsChain(
            llm_chain=llm_chain,
            reduce_documents_chain=reduce_documents_chain,
            callbacks=callbacks,
            **(combine_chain_kwargs or {}),
        )
        return cls(
            combine_documents_chain=combine_documents_chain,
            text_splitter=text_splitter,
            callbacks=callbacks,
            **kwargs,
        )

    model_config = ConfigDict(
        arbitrary_types_allowed=True,
        extra="forbid",
    )

    @property
    def input_keys(self) -> list[str]:
        """Expect input key."""
        return [self.input_key]

    @property
    def output_keys(self) -> list[str]:
        """Return output key."""
        return [self.output_key]

    def _call(
        self,
        inputs: dict[str, str],
        run_manager: CallbackManagerForChainRun | None = None,
    ) -> dict[str, str]:
        _run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
        # Split the larger text into smaller chunks.
        doc_text = inputs.pop(self.input_key)
        texts = self.text_splitter.split_text(doc_text)
        docs = [Document(page_content=text) for text in texts]
        _inputs: dict[str, Any] = {
            **inputs,
            self.combine_documents_chain.input_key: docs,
        }
        outputs = self.combine_documents_chain.run(
            _inputs,
            callbacks=_run_manager.get_child(),
        )
        return {self.output_key: outputs}

Subdomains

Classes

Dependencies

  • collections.abc
  • langchain_classic.chains
  • langchain_classic.chains.base
  • langchain_classic.chains.combine_documents.base
  • langchain_classic.chains.combine_documents.map_reduce
  • langchain_classic.chains.combine_documents.stuff
  • langchain_classic.chains.llm
  • langchain_core._api
  • langchain_core.callbacks
  • langchain_core.documents
  • langchain_core.language_models
  • langchain_core.prompts
  • langchain_text_splitters
  • pydantic
  • typing

Frequently Asked Questions

What does mapreduce.py do?
mapreduce.py is a source file in the langchain codebase, written in python. It belongs to the AgentOrchestration domain, ClassicChains subdomain.
What does mapreduce.py depend on?
mapreduce.py imports 15 module(s): collections.abc, langchain_classic.chains, langchain_classic.chains.base, langchain_classic.chains.combine_documents.base, langchain_classic.chains.combine_documents.map_reduce, langchain_classic.chains.combine_documents.stuff, langchain_classic.chains.llm, langchain_core._api, and 7 more.
Where is mapreduce.py in the architecture?
mapreduce.py is located at libs/langchain/langchain_classic/chains/mapreduce.py (domain: AgentOrchestration, subdomain: ClassicChains, directory: libs/langchain/langchain_classic/chains).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free