
    3fi                         d dl mZ d dlmZmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ  G d d	      Z G d
 de      Zy)    )Path)AnyDictOptionalSequenceN)	Callbacks)Document)BaseDocumentCompressor)Fieldc                   "    e Zd ZdZddedefdZy)RerankRequestzRequest for reranking.Nquerypassagesc                 4    || _         ||| _        y g | _        y Nr   r   )selfr   r   s      v/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/document_compressors/openvino_rerank.py__init__zRerankRequest.__init__   s    
$,$8b    NN)__name__
__module____qualname____doc__r   r    r   r   r   r      s     Ac AC Ar   r   c            
            e Zd ZU dZdZeed<   	 dZeed<   	 eed<   	  e	e
      Zeeef   ed<   	 dZeed	<   	 d
ef fdZdedefdZ	 ddee   dedee   dee   fdZdedefdZ xZS )OpenVINORerankerz!
    OpenVINO rerank models.
    Nov_model	tokenizermodel_name_or_path)default_factorymodel_kwargs   top_nkwargsc           	      X   t        |   di | 	 ddlm} 	 ddlm 	 ddt        dt        dt        d	t        ffd
} || j                        r/ |j                  | j                  fddi| j                  | _        n, |j                  | j                  fi | j                  | _        	 ddlm} |j                  | j                        | _        y # t        $ r}t	        d      |d }~ww xY w# t        $ r}t	        d      |d }~ww xY w# t        $ r}t	        d      |d }~ww xY w)Nr   ) OVModelForSequenceClassificationznCould not import optimum-intel python package. Please install it with: pip install -U 'optimum[openvino,nncf]')HfApizjCould not import huggingface_hub python package. Please install it with: `pip install -U huggingface_hub`.model_idrevision	subfolderreturnc                    t        |       }|||z  }|j                         r*|dz  j                          xs |dz  j                          S  
       }	 |j                  | |xs d      }|d nt        |      j	                         }|j
                  D cg c]+  }||j                  j                  |      r|j                  - }}|dn| d}	|	|vxs |	j                  dd      |vS c c}w # t        $ r Y yw xY w)	Nzopenvino_model.xmlzopenvino_model.binmain)r+   z/openvino_model.xmlz.xmlz.binT)
r   is_direxists
model_infoas_posixsiblings	rfilename
startswithreplace	Exception)r*   r+   r,   	model_dirhf_apir2   normalized_subfolderfilemodel_filesov_model_pathr)   s             r   require_model_exportz7OpenVINOReranker.__init__.<locals>.require_model_export8   sF    XI$%	1	!"%99AACC G%(<<DDFF WF#..x(BTf.U
%-D4	?3K3K3M %
 !+ 3 3+3~~001EF NN  !( )011DE  "4 P$,,VV<KO  s%   AC2 0C-$C2 -C2 2	C>=C>exportT)AutoTokenizerzQUnable to import transformers, please install with `pip install -U transformers`.r   r   )superr   optimum.intel.openvinor(   ImportErrorhuggingface_hubr)   strr   boolr!   from_pretrainedr#   r   transformersrA   r    )r   r&   r(   er?   rA   r)   	__class__s         @r   r   zOpenVINOReranker.__init__#   s`   "6"	O	- CG!	!	%(!	<?!	!	F   7 78L<LL''048<8I8IDM
 M<LL''+/+<+<DM	2 '66t7N7NOM  	: 		  	4 		n  	1 	sF   C C2 .D 	C/C**C/2	D;DD	D)D$$D)requestr-   c                    |j                   }|j                  }|D cg c]	  }||d   g }}| j                  j                  j                  d   j                         d   }|j                  r| j                  |ddd      }n$| j                  |d|j                         dd      } | j                  di |d	di}|d   j                  d   dkD  r|d   d d df   }	n|d   j                         }	t        ddt        j                  |	       z   z        }	t        |	|      D ]
  \  }
}|
|d
<    |j                  d d       |S c c}w )Ntextr      Tpt)padding
truncationreturn_tensors
max_length)rQ   rT   rR   rS   return_dictscorec                     | d   S )NrV   r   )xs    r   <lambda>z)OpenVINOReranker.rerank.<locals>.<lambda>   s
    AgJ r   )keyreverser   )r   r   r   rL   inputsget_partial_shape
is_dynamicr    
get_lengthshapeflattenlistnpexpzipsort)r   rL   r   r   passagequery_passage_pairslengthinput_tensorsoutputsscoresrV   s              r   rerankzOpenVINOReranker.rerankp   se   ##GOPGwv7PP&&--a0BBDQG NN#TdSW + M !NN#$!,,.# + M  $--B-BTB1:A"QZ1%FQZ'')Fa1rvvvg./0 "&(3 	%NE7$GG	% 	.== Qs   E	documentsr   	callbacksc                 "   t        |      D cg c]  \  }}||j                  d }}}t        ||      }| j                  |      d | j                   }g }	|D ],  }
t        |
d   |
d   |
d   d      }|	j                  |       . |	S c c}}w )N)idrN   r   rN   rq   rV   )rq   relevance_score)page_contentmetadata)	enumeraters   r   rm   r%   r	   append)r   rn   r   ro   idocr   rerank_requestrerank_responsefinal_resultsrs              r   compress_documentsz#OpenVINOReranker.compress_documents   s     ?H	>R
4:As1c../
 
 'UXF++n5l

C  	&AvY !$AgJGC   %	& 
s   B
model_pathc                     | j                   j                          | j                   j                  |       | j                  j                  |       y)NT)r   halfsave_pretrainedr    )r   r~   s     r   
save_modelzOpenVINOReranker.save_model   s;     	%%j1&&z2r   r   )r   r   r   r   r   r   __annotations__r    rF   r   dictr#   r   r%   intr   rm   r   r	   r   r   r}   rG   r   __classcell__)rK   s   @r   r   r      s     Hc Is(#(#>L$sCx.>0E3NKP KPZ"c "c "P *.	H%  I&	
 
(	* 
r   r   )pathlibr   typingr   r   r   r   numpyrc   langchain_core.callbacksr   langchain_core.documentsr	   #langchain_core.documents.compressorr
   pydanticr   r   r   r   r   r   <module>r      s8     0 0  . - F A A]- ]r   