Home / Class/ EnsembleRetriever Class — langchain Architecture

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

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