
    3fi                         d Z ddlmZmZmZ ddlZddlmZ ddl	m
Z
 ddlmZmZ dee   dee   d	efd
Z G d dee      Zy)zSelect and order examples based on ngram overlap score (sentence_bleu score).

https://www.nltk.org/_modules/nltk/translate/bleu_score.html
https://aclanthology.org/P02-1040.pdf
    )AnyDictListN)BaseExampleSelector)PromptTemplate)	BaseModelmodel_validatorsourceexamplereturnc                     ddl m}m} | d   j                         }|D cg c]  }|j                          }}t	         ||| |       j
                  d            S c c}w )aR  Compute ngram overlap score of source and example as sentence_bleu score
    from NLTK package.

    Use sentence_bleu with method1 smoothing function and auto reweighting.
    Return float value between 0.0 and 1.0 inclusive.
    https://www.nltk.org/_modules/nltk/translate/bleu_score.html
    https://aclanthology.org/P02-1040.pdf
    r   SmoothingFunctionsentence_bleuT)smoothing_functionauto_reweigh)nltk.translate.bleu_scorer   r   splitfloatmethod1)r
   r   r   r   
hypothesess
referencess          q/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/example_selectors/ngram_overlap.pyngram_overlap_scorer      sa    
 "J%,-!'')-J-02::		
  .s   Ac                       e Zd ZU dZee   ed<   	 eed<   	 dZe	ed<   	  e
d      eded	efd
              Zdeeef   d	dfdZdeeef   d	ee   fdZy)NGramOverlapExampleSelectorzSelect and order examples based on ngram overlap score (sentence_bleu score
    from NLTK package).

    https://www.nltk.org/_modules/nltk/translate/bleu_score.html
    https://aclanthology.org/P02-1040.pdf
    examplesexample_promptg      	thresholdbefore)modevaluesr   c                 R    	 ddl m}m} |S # t        $ r}t        d      |d}~ww xY w)z$Check that valid dependencies exist.r   r   zjNot all the correct dependencies for this ExampleSelect exist.Please install nltk with `pip install nltk`.N)r   r   r   ImportError)clsr#   r   r   es        r   check_dependenciesz.NGramOverlapExampleSelector.check_dependenciesD   s<    		   	? 	s    	&!&r   Nc                 :    | j                   j                  |       y)zAdd new example to list.N)r   append)selfr   s     r   add_examplez'NGramOverlapExampleSelector.add_exampleU   s    W%    input_variablesc                    t        |j                               }g }t        | j                        }dg|z  }| j                  j
                  d   }t        |      D ]"  }t        || j                  |   |   g      ||<   $ 	 t        j                  |      }||   | j                  k  st        ||   | j                  z
        dk  r	 |S |j                  | j                  |          | j                  dz
  ||<   y)zReturn list of examples sorted by ngram_overlap_score with input.

        Descending order.
        Excludes any examples with ngram_overlap_score less than or equal to threshold.
        g        r   g&.>g      ?)listr#   lenr   r   r.   ranger   npargmaxr    absr*   )	r+   r.   inputsr   kscorefirst_prompt_template_keyiarg_maxs	            r   select_examplesz+NGramOverlapExampleSelector.select_examplesY   s     o,,./	$($7$7$G$G$J!q 	A*q)*CDEE!H	
 ii&Gg/Cg/55 
  OODMM'23!^^c1E'N r-   )__name__
__module____qualname____doc__r   dict__annotations__r   r    r   r	   classmethodr   r   r(   strr,   r<    r-   r   r   r   *   s     4jB""6Iu	 (#    $&4S> &d &tCH~ $t* r-   r   )r@   typingr   r   r   numpyr3    langchain_core.example_selectorsr   langchain_core.promptsr   pydanticr   r	   rD   r   r   r   rE   r-   r   <module>rK      sQ    # "  @ 1 /S	 DI % 6J"5y Jr-   