
    3fib                        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
 d dlmZ d dlmZmZ d dlmZ d dlmZmZ  G d d	e      Zy
)    )annotations)deepcopy)AnyDictListOptionalSequenceUnion)	Callbacks)BaseDocumentCompressorDocument)get_from_dict_or_env)
ConfigDictmodel_validatorc                      e Zd ZU dZdZded<   	 dZded<   	 dZded<   	 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Z	 d	 	 	 	 	 	 	 ddZy)VolcengineRerankz6Document compressor that uses `Volcengine Rerank API`.Nr   clientzOptional[str]akskapi-vikingdb.volces.comstrregion
cn-beijinghost   Optional[int]top_nTforbid)populate_by_namearbitrary_types_allowedextrabefore)modec           
         |j                  d      s?	 ddlm} t	        |dd      |d<   t	        |dd      |d<    |d	d
ddd|d   |d         |d<   |S # t        $ r t        d      w xY w)z?Validate that api key and python package exists in environment.r   r   VikingDBServicezCould not import volcengine python package. Please install it with `pip install volcengine` or `pip install --user volcengine`.r   VOLC_API_AKr   VOLC_API_SKr   r   https   )r   r   schemeconnection_timeoutsocket_timeoutr   r   )getvolcengine.viking_dbr&   ImportErrorr   )clsvaluesr&   s      x/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/document_compressors/volcengine_rerank.pyvalidate_environmentz%VolcengineRerank.validate_environment)   s    
 zz(#@ 0mLF4L/mLF4L..##%!$<$< F8 )  !: s   A A()r   c               |   t        |      dk(  rg S |D cg c]#  }|t        |t              r|j                  n|d% }}ddlm} | j                  }|j                  |      }g }	t        |      D ]  \  }
}|	j                  |
|d        |	j                  d d       ||dkD  r|n| j                  }|	d| S c c}w )	aU  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.
            top_n : The number of results to return. If None returns all results.
                Defaults to self.top_n.
        r   )querycontentr%   )indexrelevance_scorec                    | d   S )Nr:    )xs    r3   <lambda>z)VolcengineRerank.rerank.<locals>.<lambda>j   s    *;(<     T)keyreverseN)len
isinstancer   page_contentr/   r&   r   batch_rerank	enumerateappendsortr   )self	documentsr7   r   docdocsr&   r   resultsresult_dictsr9   scores               r3   rerankzVolcengineRerank.rerankG   s      y>QI !

  /9#x/H3++c
 
 	9"&++%%d+%g. 	LLE5%E JK	L 	<dK-5194::FU##)
s   (B9c                    g }| j                  ||      D ]W  }||d      }t        |j                  t        |j                              }|d   |j                  d<   |j                  |       Y |S )a[  
        Compress documents using Volcengine'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.
        r9   )metadatar:   )rP   r   rD   r   rR   rG   )rI   rJ   r7   	callbacks
compressedresrK   doc_copys           r3   compress_documentsz#VolcengineRerank.compress_documentso   sy    " 
;;y%0 	(CCL)C 0 08CLL;QRH367H3IH/0h'		(
 r?   )r2   r   returnr   )rJ   z$Sequence[Union[str, Document, dict]]r7   r   r   r   rX   zList[Dict[str, Any]])N)rJ   Sequence[Document]r7   r   rS   zOptional[Callbacks]rX   rY   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   model_configr   classmethodr4   rP   rW   r<   r?   r3   r   r      s    @FC=B5 B5 ,FC+9D#9E=( $L (#  $B  "&$7&$ &$
 &$ 
&$X *.	%  '	
 
r?   r   N)
__future__r   copyr   typingr   r   r   r   r	   r
   langchain_core.callbacks.baser   langchain_core.documentsr   r   langchain_core.utilsr   pydanticr   r   r   r<   r?   r3   <module>rh      s,    "  = = 3 E 5 0z- zr?   