EnsembleRetriever Class — langchain Architecture
Architecture documentation for the EnsembleRetriever class in ensemble.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca["EnsembleRetriever"] 3a20478a_3692_141f_433b_a32429b00020["BaseRetriever"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|extends| 3a20478a_3692_141f_433b_a32429b00020 38b769c4_c07d_3256_6870_9c6ee6931708["Document"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|extends| 38b769c4_c07d_3256_6870_9c6ee6931708 7c5221fd_0453_d6db_1e3d_2c6252f0057b["ensemble.py"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|defined in| 7c5221fd_0453_d6db_1e3d_2c6252f0057b 99224aee_0769_89cc_b4cc_287be8041771["config_specs()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| 99224aee_0769_89cc_b4cc_287be8041771 347d68b7_09ac_736f_f1e6_6353f7832912["_set_weights()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| 347d68b7_09ac_736f_f1e6_6353f7832912 d7e07719_d9d2_93df_a94c_b665406d2538["invoke()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| d7e07719_d9d2_93df_a94c_b665406d2538 48581379_bf19_22a9_a234_b2b872f7eb03["ainvoke()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| 48581379_bf19_22a9_a234_b2b872f7eb03 ccce4b1c_718f_d147_2e66_f9cb6956fb6b["_get_relevant_documents()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| ccce4b1c_718f_d147_2e66_f9cb6956fb6b b9cd53a7_287b_9106_31e2_728f202c29e2["_aget_relevant_documents()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| b9cd53a7_287b_9106_31e2_728f202c29e2 846fcd62_7844_5645_0197_3c181518377e["rank_fusion()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| 846fcd62_7844_5645_0197_3c181518377e f22e315b_c302_5414_8dd3_04bde7d630dd["arank_fusion()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| f22e315b_c302_5414_8dd3_04bde7d630dd e4787291_6959_3384_643b_10f54ba9483a["weighted_reciprocal_rank()"] b484cd3a_bbd0_4ff6_dc8c_3fc1ac219bca -->|method| e4787291_6959_3384_643b_10f54ba9483a
Relationship Graph
Source Code
libs/langchain/langchain_classic/retrievers/ensemble.py lines 53–336
class EnsembleRetriever(BaseRetriever):
"""Retriever that ensembles the multiple retrievers.
It uses a rank fusion.
Args:
retrievers: A list of retrievers to ensemble.
weights: A list of weights corresponding to the retrievers. Defaults to equal
weighting for all retrievers.
c: A constant added to the rank, controlling the balance between the importance
of high-ranked items and the consideration given to lower-ranked items.
id_key: The key in the document's metadata used to determine unique documents.
If not specified, page_content is used.
"""
retrievers: list[RetrieverLike]
weights: list[float]
c: int = 60
id_key: str | None = None
@property
def config_specs(self) -> list[ConfigurableFieldSpec]:
"""List configurable fields for this runnable."""
return get_unique_config_specs(
spec for retriever in self.retrievers for spec in retriever.config_specs
)
@model_validator(mode="before")
@classmethod
def _set_weights(cls, values: dict[str, Any]) -> Any:
if not values.get("weights"):
n_retrievers = len(values["retrievers"])
values["weights"] = [1 / n_retrievers] * n_retrievers
return values
@override
def invoke(
self,
input: str,
config: RunnableConfig | None = None,
**kwargs: Any,
) -> list[Document]:
from langchain_core.callbacks import CallbackManager
config = ensure_config(config)
callback_manager = CallbackManager.configure(
config.get("callbacks"),
None,
verbose=kwargs.get("verbose", False),
inheritable_tags=config.get("tags", []),
local_tags=self.tags,
inheritable_metadata=config.get("metadata", {}),
local_metadata=self.metadata,
)
run_manager = callback_manager.on_retriever_start(
None,
input,
name=config.get("run_name") or self.get_name(),
**kwargs,
)
try:
result = self.rank_fusion(input, run_manager=run_manager, config=config)
except Exception as e:
run_manager.on_retriever_error(e)
raise
else:
run_manager.on_retriever_end(
result,
**kwargs,
)
return result
@override
async def ainvoke(
self,
input: str,
config: RunnableConfig | None = None,
**kwargs: Any,
) -> list[Document]:
from langchain_core.callbacks import AsyncCallbackManager
Extends
Source
Frequently Asked Questions
What is the EnsembleRetriever class?
EnsembleRetriever is a class in the langchain codebase, defined in libs/langchain/langchain_classic/retrievers/ensemble.py.
Where is EnsembleRetriever defined?
EnsembleRetriever is defined in libs/langchain/langchain_classic/retrievers/ensemble.py at line 53.
What does EnsembleRetriever extend?
EnsembleRetriever extends BaseRetriever, Document.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free