
    3fi                        U 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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 d	Zd
ed<    G d de      Zy)    )annotations)deepcopy)AnyDictListOptionalSequenceUnionN)	Callbacks)BaseDocumentCompressorDocument)get_from_dict_or_env)
ConfigDictmodel_validatorzhttps://api.jina.ai/v1/rerankstrJINA_API_URLc                      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<   	  e
dd      Z ed      edd              Zdddd	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)
JinaRerankz0Document compressor that uses `Jina Rerank API`.Nr   session   Optional[int]top_nzjina-reranker-v1-base-enr   modelOptional[str]jina_api_key	langchain
user_agentTforbid)arbitrary_types_allowedextrabefore)modec                    t        |dd      }|j                  dd      }t        j                         }|j                  j                  d| dd|d       ||d	<   |S )
z,Validate that api key exists in environment.r   JINA_API_KEYr   r   zBearer identityzapplication/json)AuthorizationzAccept-EncodingzContent-typez
user-agentr   )r   getrequestsSessionheadersupdate)clsvaluesr   r   r   s        r/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/document_compressors/jina_rerank.pyvalidate_environmentzJinaRerank.validate_environment#   sk     ,FNNSZZk:
""$#*<.!9#- 2(		
 $y    )r   r   max_chunks_per_docc                  t        |      dk(  rg S |D cg c]   }t        |t              r|j                  n|" }}|xs | j                  }||dkD  r|n| j
                  }||||d}| j                  j                  t        |      j                         }	d|	vrt        |	d         |	d   }
g }|
D ]  }|j                  |d   |d   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   )jsonresultsdetailindexrelevance_score)r9   r:   )len
isinstancer   page_contentr   r   r   postr   r6   RuntimeErrorappend)selfr5   r4   r   r   r2   docdocsdatarespr7   result_dictsress                r.   rerankzJinaRerank.rerank5   s   & y>QINW
GJ
3 9CsB
 
 #-5194::	
 ||   ! 
 $& 	
 D tH~..y/ 	C \'*+<'=	 ;
s   %Cc                    g }| j                  ||      D ]W  }||d      }t        |j                  t        |j                              }|d   |j                  d<   |j                  |       Y |S )aU  
        Compress documents using Jina'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:   )rH   r   r=   r   rJ   r@   )rA   r5   r4   	callbacks
compressedrG   rB   doc_copys           r.   compress_documentszJinaRerank.compress_documentsi   sy    " 
;;y%0 	(CCL)C 0 08CLL;QRH367H3IH/0h'		(
 r0   )r-   r   returnr   )r5   z$Sequence[Union[str, Document, dict]]r4   r   r   r   r   r   r2   r   rO   zList[Dict[str, Any]])N)r5   Sequence[Document]r4   r   rK   zOptional[Callbacks]rO   rP   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   model_configr   classmethodr/   rH   rN    r0   r.   r   r      s    :GS3E=(+E3+%"&L-&!J!< $L
 (#  $*  $!,0272 2
 2 2 *2 
2p *.	%  '	
 
r0   r   )
__future__r   copyr   typingr   r   r   r   r	   r
   r(   langchain_core.callbacksr   langchain_core.documentsr   r   langchain_core.utilsr   pydanticr   r   r   rU   r   rX   r0   r.   <module>r`      s9    "  = =  . E 5 03c 3q' qr0   