�
A��g~) � �P � 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$ ede�� � Z%dee$ de
e$ge%f de
e$ fd�Z& G d� 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 # � K � t � � }| D ]*} ||� � x}|vr|� |� � |V � �+dS )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�ks �m/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/langchain/retrievers/ensemble.py�
unique_by_keyr'