File: //usr/local/lib/python3.10/dist-packages/langchain/retrievers/__pycache__/ensemble.cpython-310.pyc
o
���g~) � @ s d Z ddlZddlmZ ddlmZ ddlmZ ddlm Z m
Z
mZmZm
Z
mZmZmZmZ ddlmZmZ ddlmZ dd lmZmZ dd
lmZ ddlmZmZ ddlm Z m!Z! dd
l"m#Z# ed�Z$eded�Z%dee$ de
e$ge%f de
e$ fdd�Z&G dd� de�Z'dS )zo
Ensemble retriever that ensemble the results of
multiple retrievers by using weighted Reciprocal Rank Fusion
� N)�defaultdict)�Hashable)�chain) �Any�Callable�Dict�Iterable�Iterator�List�Optional�TypeVar�cast)�#AsyncCallbackManagerForRetrieverRun�CallbackManagerForRetrieverRun)�Document)�
BaseRetriever�
RetrieverLike)�RunnableConfig)�
ensure_config�patch_config)�ConfigurableFieldSpec�get_unique_config_specs)�model_validator�T�H)�bound�iterable�key�returnc c s6 � t � }| D ]}||� }|vr|�|� |V qdS )a
Yield unique elements of an iterable based on a key function.
Args:
iterable: The iterable to filter.
key: A function that returns a hashable key for each element.
Yields:
Unique elements of the iterable based on the key function.
N)�set�add)r r �seen�e�k� r$ �H/usr/local/lib/python3.10/dist-packages/langchain/retrievers/ensemble.py�
unique_by_key( s �
��r&