
    rh	                    Z    d dl mZ d dlmZ d dlmZ d dlmZ erd dlm	Z	  G d de      Z
y)	    )annotations)Iterable)TYPE_CHECKING)SentenceEvaluator)SentenceTransformerc                  H     e Zd ZdZd fd fdZ	 d	 	 	 	 	 	 	 	 	 ddZ xZS )SequentialEvaluatora'  
    This evaluator allows that multiple sub-evaluators are passed. When the model is evaluated,
    the data is passed sequentially to all sub-evaluators.

    All scores are passed to 'main_score_function', which derives one final score value

    Args:
        evaluators (Iterable[SentenceEvaluator]): A collection of SentenceEvaluator objects.
        main_score_function (function, optional): A function that takes a list of scores and returns the main score.
            Defaults to selecting the last score in the list.

    Example:
        ::

            evaluator1 = BinaryClassificationEvaluator(...)
            evaluator2 = InformationRetrievalEvaluator(...)
            evaluator3 = MSEEvaluator(...)
            seq_evaluator = SequentialEvaluator([evaluator1, evaluator2, evaluator3])
    c                    | d   S )N )scoress    /var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/sentence_transformers/evaluation/SequentialEvaluator.py<lambda>zSequentialEvaluator.<lambda>!   s    cijlcm     c                >    t         |           || _        || _        y )N)super__init__
evaluatorsmain_score_function)selfr   r   	__class__s      r   r   zSequentialEvaluator.__init__!   s    $#6 r   c                $   g }g }t        | j                        D ]  \  }} |||||      }	t        |	t              s|j	                  |	       d| |	i}	nYt        |d      r|j	                  |	|j                            n.|j	                  |	t        |	j                               d             |j	                  |	        d| _        | j                  |      }
|D 	ci c]  }	|	j                         D ]  \  }}||
  }}}	}|
|d<   |S c c}}}	w )N
evaluator_primary_metricr   sequential_score)	enumerater   
isinstancedictappendhasattrr   listkeysr   items)r   modeloutput_pathepochstepsevaluationsr   evaluator_idx	evaluator
evaluation
main_scorekeyvalueresultss                 r   __call__zSequentialEvaluator.__call__&   s    (1$//(B 	+$M9"5+ueDJj$/j) *=/:JG
9&67MM*Y-E-E"FGMM*T*//2C-DQ-G"HIz*	+ 1--f5
0;aa*jN^N^N`a
U3:a3aa&0"# bs   "D)r   zIterable[SentenceEvaluator])Nr   r   )
r$   r   r%   z
str | Noner&   intr'   r1   returnzdict[str, float])__name__
__module____qualname____doc__r   r0   __classcell__)r   s   @r   r	   r	      sH    ( Un 7 ik(7AQTbe	r   r	   N)
__future__r   collections.abcr   typingr   2sentence_transformers.evaluation.SentenceEvaluatorr   )sentence_transformers.SentenceTransformerr   r	   r   r   r   <module>r=      s$    " $   PM1+ 1r   