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}
Domain
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
Source
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