
    3fi                       d dl mZ d dlmZ d dlmZ d dlmZ d dl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 d d
lmZ d dlmZmZmZmZ e	rd dlmZmZm Z  n	 d dlmZmZm Z   G d de      Z" G d de      Z#y# e!$ r Y w xY w)    )annotations)deepcopy)Enumversion)TYPE_CHECKINGAnyDictOptionalSequence)BaseDocumentCompressor)	Callbacks)Document)get_from_dict_or_env)Version)
ConfigDictFieldPrivateAttrmodel_validator)	CandidateQueryRequestc                  
   e Zd ZU dZdZded<   	  ed      Zded<   	  ed	      Zd
ed<   	  ed      Z	ded<   	  ed      Z
d
ed<   	  e       Zded<    edd      Z ed      edd              Z	 d	 	 	 	 	 	 	 ddZy)RankLLMRerankz.Document compressor using Flashrank interface.Nr	   client   )defaultinttop_nzephyrstrmodel
   	step_sizezgpt-3.5-turbo	gpt_model
_retrieverTforbid)arbitrary_types_allowedextrabefore)modec                |   |j                  d      s|j                  dd      }t        t        d            t        d      k  }	 t        |j	                               }	 |t        j                  k(  r|rdd	lm} ndd	l	m}  |       |d<   |S |t        j                  k(  r|rdd
lm} ndd
lm}  |       |d<   |S |t        j                  k(  r;|rddlm} nddlm} ddlm} t)        |dd      }	 ||d   d|	      }
 ||
      |d<   |S |S # t
        $ r t        d      w xY w# t*        $ r t+        d      w xY w)z.Validate python package exists in environment.r   r"   r    rank_llmr   z0.12.8z@Unsupported model type. Please use 'vicuna', 'zephyr', or 'gpt'.r   )VicunaReranker)ZephyrReranker)
SafeOpenai)Rerankeropen_api_keyOPENAI_API_KEYr%   i   )r"   context_sizekeyszXCould not import rank_llm python package. Please install it with `pip install rank_llm`.)getr   r   	ModelTypelower
ValueErrorVICUNArank_llm.rerank.vicuna_rerankerr.   (rank_llm.rerank.listwise.vicuna_rerankerZEPHYRrank_llm.rerank.zephyr_rerankerr/   (rank_llm.rerank.listwise.zephyr_rerankerGPTrank_llm.rerank.rank_gptr0   !rank_llm.rerank.listwise.rank_gptrank_llm.rerank.rerankerr1   r   ImportError)clsvaluesclient_nameis_pre_rank_llm_revamp
model_enumr.   r/   r0   r1   openai_api_keyagents              u/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/document_compressors/rankllm_rerank.pyvalidate_environmentz"RankLLMRerank.validate_environment0   sf   
 zz(# **Wh7K%,WZ5H%IWN &"&{'8'8':;
*!1!11-R (6'7F8$F E  9#3#33-R (6'7F8$4 3  9==0-GPA%90@&N '$[1%)+E
 (0F8$ vc   V V  !E s%   D  ,D& ,D& <AD& D#&D;c                   t        t        |d      t        |      D cg c]  \  }}t        d|j                  i|d      ! c}}      }| j
                  j                  |t        |      t        dt        |            d      }g }t        |d	      re|j                  D ]U  }	|t        |	j                           }t        |j                  t        |j                        
      }
|j!                  |
       W nZ|D ]U  }	|t        |	j                           }t        |j                  t        |j                        
      }
|j!                  |
       W |d | j"                   S c c}}w )N   )textqidrP   )docdocidscore)query
candidates   r#   )rank_endwindow_sizesteprV   )metadata)r   r   	enumerater   page_contentr   reranklenminhasattrrV   r   rS   r   r   r[   appendr   )self	documentsrU   	callbacksindexrR   requestrerank_resultsfinal_resultsresdoc_copys              rL   compress_documentsz RankLLMRerank.compress_documentsq   sH    U* #,I"6E3 vs'7'78QO
 ++^BI/	 , 
 ><0%00 /CII/#C$4$4x?UV$$X./
 & /CII/#C$4$4x?UV$$X./
 \tzz**5s   $E$)rF   r
   returnr	   )N)rd   Sequence[Document]rU   r!   re   zOptional[Callbacks]rm   rn   )__name__
__module____qualname____doc__r   __annotations__r   r   r"   r$   r%   r   r&   r   model_configr   classmethodrM   rl        rL   r   r      s    8FC9q!E3!$x(E3(-2&Is&.?3Is3!mJ# $L
 (#=  $=F *.	"+%"+ "+ '	"+
 
"+rw   r   c                      e Zd ZdZdZdZy)r7   vicunar    gptN)ro   rp   rq   r:   r=   r@   rv   rw   rL   r7   r7      s    FF
Crw   r7   N)$
__future__r   copyr   enumr   importlib.metadatar   typingr   r	   r
   r   r   6langchain_classic.retrievers.document_compressors.baser    langchain_core.callbacks.managerr   langchain_core.documentsr   langchain_core.utilsr   packaging.versionr   pydanticr   r   r   r   rank_llm.datar   r   r   rD   r   r7   rv   rw   rL   <module>r      su    "   & ? ? 7 - 5 % D D77;;
w+* w+t }  s   
B   BB