
    3fi                        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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Fieldmodel_validatorc                      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
      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)DashScopeRerankz5Document compressor that uses `DashScope Rerank API`.Nr   clientzOptional[str]model   Optional[int]top_napi_key)aliasdashscope_api_keyTforbid)populate_by_namearbitrary_types_allowedextrabefore)modec                    |j                  d      sG	 ddl}|j                  |d<   t	        |dd      |d<   |j                  j
                  j                  |d<   |S # t        $ r t        d      w xY w)z?Validate that api key and python package exists in environment.r   r   NzZCould not import dashscope python package. Please install it with `pip install dashscope`.r   DASHSCOPE_API_KEYr   )get	dashscopeImportError
TextReRankr   Models
gte_rerank)clsvaluesr%   s      w/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/document_compressors/dashscope_rerank.pyvalidate_environmentz$DashScopeRerank.validate_environment"   s    
 zz(#   )33F8*>+-@+F&' (2299DDF7O  !F s   A A0)r   c                  t        |      dk(  rg S |D cg c]   }t        |t              r|j                  n|" }}||dkD  r|n| j                  }| j
                  j                  | j                  |||d| j                        }g }|j                  j                  D ]*  }|j                  |j                  |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   F)r   query	documentsr   return_documentsr   )indexrelevance_score)len
isinstancer   page_contentr   r   callr   r   outputresultsappendr3   r4   )	selfr1   r0   r   docdocsr:   result_dictsress	            r,   rerankzDashScopeRerank.rerank8   s      y>QINW
GJ
3 9CsB
 
  -5194::++""**"** # 
 >>)) 	C YY'*':':	 /
s   %Cc                    g }| j                  ||      D ]W  }||d      }t        |j                  t        |j                              }|d   |j                  d<   |j                  |       Y |S )aZ  
        Compress documents using DashScope'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.
        r3   )metadatar4   )rA   r   r7   r   rC   r;   )r<   r1   r0   	callbacks
compressedr@   r=   doc_copys           r,   compress_documentsz"DashScopeRerank.compress_documentsc   sy    " 
;;y%0 	(CCL)C 0 08CLL;QRH367H3IH/0h'		(
     )r+   r   returnr   )r1   z$Sequence[Union[str, Document, dict]]r0   strr   r   rI   zList[Dict[str, Any]])N)r1   Sequence[Document]r0   rJ   rD   zOptional[Callbacks]rI   rK   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   model_configr   classmethodr-   rA   rG    rH   r,   r   r      s    ?FC<E=%E=(',T'C}C  $L (#  $2  ")7) )
 ) 
)^ *.	%  '	
 
rH   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   rS   rH   r,   <module>r[      s/    "  = = 3 E 5 7 7n, nrH   