
    3fip                        d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZ erd dlmZ d d	lmZ d d
lmZ n	 d dlmZ d d	lmZ d d
lmZ dZdZ G d de      Zy# e$ r Y w xY w)    )annotations)deepcopy)TYPE_CHECKINGAnyDictListOptionalSequenceUnion)BaseDocumentCompressor)	Callbacks)Document)
ConfigDictmodel_validator)rerankClient)RerankInputzBAAI/bge-reranker-basezhttp://localhost:7997c                      e Zd ZU dZdZded<   	 dZded<   	 dZded	<   	  ed
d
d      Z	 e
d      edd              Zddd	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)InfinityRerankz4Document compressor that uses `Infinity Rerank API`.NzOptional[Client]clientOptional[str]model   Optional[int]top_nTforbid)populate_by_namearbitrary_types_allowedextrabefore)modec                    d|v r|S 	 ddl m} |j                  dt              |d<    |t
              |d<   |S # t        $ r t        d      w xY w)z3Validate that python package exists in environment.r   r   r   zfCould not import infinity_client python package. Please install it with `pip install infinity_client`.r   )base_url)infinity_client.clientr   ImportErrorgetDEFAULT_MODEL_NAMEDEFAULT_BASE_URL)clsvaluesr   s      v/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/document_compressors/infinity_rerank.pyvalidate_environmentz#InfinityRerank.validate_environment1   si     vM9 %jj2DEF7O%/?@F8M  !L s	   9 A)r   r   c                  t        |      dk(  rg S |D cg c]   }t        |t              r|j                  n|" }}|xs | j                  }t        |||      }t        j                  | j                  |      }t        |d      rt        |d      }g }	|D ]*  }
|	j                  |
j                  |
j                  d       , |	j                  d d       ||dkD  r|n| j                  }|	d	| S c c}w )
a  Returns an ordered list of documents ordered by their relevance to the provided query.

        Args:
            query: The query to use for reranking.
            documents: A sequence of documents to rerank.
            model: The model to use for re-ranking. Default to self.model.
            top_n : The number of results to return. If None returns all results.
                Defaults to self.top_n.
            max_chunks_per_doc : The maximum number of chunks derived from a document.
        r   )query	documentsr   )r   bodyresults)indexrelevance_scorec                    | d   S )Nr5    )xs    r,   <lambda>z'InfinityRerank.rerank.<locals>.<lambda>p   s    *;(<     T)keyreverseN)len
isinstancer   page_contentr   r   r   syncr   hasattrgetattrappendr4   r5   sortr   )selfr1   r0   r   r   docdocsinputr3   result_dictsress              r,   r   zInfinityRerank.rerankD   s   $ y>QINW
GJ
3 9CsB
 
 #

 ++T[[u=7I&gy1G 	C YY'*':':	 	<dK-5194::FU##7
s   %C2c                    g }| j                  ||      D ]W  }||d      }t        |j                  t        |j                              }|d   |j                  d<   |j                  |       Y |S )aY  
        Compress documents using Infinity's rerank API.

        Args:
            documents: A sequence of documents to compress.
            query: The query to use for compressing the documents.
            callbacks: Callbacks to run during the compression process.

        Returns:
            A sequence of compressed documents.
        r4   )metadatar5   )r   r   r?   r   rL   rC   )rE   r1   r0   	callbacks
compressedrJ   rF   doc_copys           r,   compress_documentsz!InfinityRerank.compress_documentsu   sy    " 
;;y%0 	(CCL)C 0 08CLL;QRH367H3IH/0h'		(
 r:   )r+   r   returnr   )
r1   z$Sequence[Union[str, Document, dict]]r0   strr   r   r   r   rQ   zList[Dict[str, Any]])N)r1   Sequence[Document]r0   rR   rM   zOptional[Callbacks]rQ   rS   )__name__
__module____qualname____doc__r   __annotations__r   r   r   model_configr   classmethodr-   r   rP   r7   r:   r,   r   r      s    >#F#;E=%E=( $L (#  $,  $!/$7/$ /$
 /$ /$ 
/$j *.	%  '	
 
r:   r   N)
__future__r   copyr   typingr   r   r   r   r	   r
   r   6langchain_classic.retrievers.document_compressors.baser    langchain_core.callbacks.managerr   langchain_core.documentsr   pydanticr   r   infinity_client.api.defaultr   r%   r   infinity_client.modelsr   r&   r(   r)   r   r7   r:   r,   <module>rd      so    "  L L L 7 - 02-2616 . * m+ m  s   A1 1A98A9