
    3fi                         d dl Z d dl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 d d	lmZ erd d
lmZ erd d
lmZ  G d de      Zy)    N)TYPE_CHECKINGAnyOptionalSequence)
exceptions)Credentials)	Callbacks)Document)BaseDocumentCompressor)
ConfigDictField)get_client_infodiscoveryengine_v1alphac            
       
    e Zd ZU dZ ed      Zeed<   	  ed      Zeed<   	  ed      Z	eed<   	  ed	      Z
eed
<   	  ed      Zeed<   	  ed      Zeed<   	  ed      Zee   ed<   	  ed      Zee   ed<   	  ed      Zee   ed<   	  ed      Zee   ed<   	  ed      Zee   ed<   	 dZeed<   def fdZd!dZdedee   dee   fdZ	 d"dee   dedee   dee   fdZ edd       Z  xZ!S )#VertexAIRanka  Document compressor using Vertex AI Ranking API.

    Inherits from
    [`BaseDocumentCompressor`][langchain_core.documents.compressor.BaseDocumentCompressor].

    Reranks documents based on relevance to a query using Google's semantic ranking
    model.
    N)default
project_idgloballocation_iddefault_configranking_configzsemantic-ranker-512@latestmodel
   top_nF!ignore_record_details_in_responseid_fieldtitle_fieldcredentialscredentials_pathtimeoutclientkwargsc                     t        |   di | |j                  d      | _        | j                  s| j	                         | _        yy)zwInitialize the Vertex AI Ranker.

        Configures ranking parameters and initializes Google Cloud services.
        r"   N )super__init__getr"   _get_rank_service_client)selfr#   	__class__s     d/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_google_community/vertex_rank.pyr'   zVertexAIRank.__init__A   sA    
 	"6"jj*{{779DK     returnc                     	 ddl m}  |j                  | j                  xs- | j
                  rt        j                  | j
                        ndt        d            S # t        $ r}t        d      |d}~ww xY w)zGet `RankServiceClient` for Vertex AI Ranking API calls.

        Returns:
            Client instance for ranking API.
        r   r   zCould not import google-cloud-discoveryengine python package. Please, install vertexaisearch dependency group: `pip install langchain-google-community[vertexaisearch]`Nzvertex-ai-search)module)r   client_info)	google.cloudr   ImportErrorRankServiceClientr   r    r   from_service_account_filer   )r*   r   excs      r,   r)   z%VertexAIRank._get_rank_service_clientK   s    	< 9&88((  (( 55d6K6KL'/AB
 	
  	K 		s   A 	A9(A44A9query	documentsc                    ddl m} 	 t        |      D cg c]  \  }}|j                  s1| j                  r|j
                  j                  | j                        r |j                  d| j                  r%|j
                  j                  | j                        n
t        |      |j                  d| j                  r'd|j
                  j                  | j                        ini  }}}d| j                   d| j                   d	| j                   } |j                   || j"                  || j$                  | j&                  
      }	 | j(                  j+                  || j,                        }	|	j6                  D cg c]d  }t9        | j&                  s|j:                  nd|j<                  |j>                  d| j                  r| j                  |j@                  ini       f c}S c c}}w # t        $ r' t        j                  d| j                   d       Y 6w xY w# t.        j0                  $ r4}
t3        dt        |
              t5        dt        |
             |
d}
~
ww xY wc c}w )zRerank documents based on query relevance.

        Args:
            query: Query to use for reranking.
            documents: Documents to rerank.

        Returns:
            Reranked documents with relevance scores.
        r   r   )idcontenttitlez
id_field 'z!' not found in document metadata.z	projects/z/locations/z/rankingConfigs/)r   r   r7   recordsr   r   )requestr!   z%Error in Vertex AI Ranking API call: N )r:   relevance_score)page_contentmetadatar%   )!r2   r   	enumeraterA   r   rB   r(   RankingRecordr   strKeyErrorwarningswarnr   r   r   RankRequestr   r   r   r"   rankr!   core_exceptionsGoogleAPICallErrorprintRuntimeErrorr=   r
   r;   r:   scorer<   )r*   r7   r8   r   idxdocr=   ranking_config_pathr>   responseerecords               r,   _rerank_documentszVertexAIRank._rerank_documentsc   sQ    	9	Y !*) 4 C##$$)9)9$:J:J)K 6'55 ;?==((7cRUh,,
  ++ !#,,"2"243C3C"DEG $ (D4D4D3Et2235 	
 6)55.****.2.T.T
	X{{'''NH  #**
  == $^^ ))'-|| <@;K;K((&,,7QS		
 	
K  	YMMJt}}o5VWX	Y& 11 	X9#a&BC!Fs1vhOPVWW	X
sB   G3 CG-)G3 'H& A)I0-G3 3,H#"H#&I-9/I((I-	callbacksc                 &    | j                  ||      S )aA  Compress documents using Vertex AI rerank API.

        Args:
            documents: Document instances to compress.
            query: Query string for document compression.
            callbacks: Callbacks to execute during compression.

        Returns:
            Compressed documents with relevance scores.
        )rV   )r*   r8   r7   rW   s       r,   compress_documentszVertexAIRank.compress_documents   s      %%eY77r-   ignoreT)extraarbitrary_types_allowed)r.   z)discoveryengine_v1alpha.RankServiceClient)N)"__name__
__module____qualname____doc__r   r   rE   __annotations__r   r   r   r   intr   boolr   r   r   r   r   r    r!   r"   r   r'   r)   r   r
   rV   r	   rY   r   model_config__classcell__)r+   s   @r,   r   r      s    D)J)"X.K..(89NC9*;<E3<r"E3"&.3E.B%tB@#D1Hhsm19!&t!4K#42).t)<K+&<*&+D&9hsm9D"40GXc]0+FC: :
0@
@
%-h%7@
	(	@
L *.	8H%8 8 I&	8
 
(	8$  $Lr-   r   )rG   typingr   r   r   r   google.api_corer   rK   google.auth.credentialsr   langchain_core.callbacksr	   langchain_core.documentsr
   #langchain_core.documents.compressorr   pydanticr   r   !langchain_google_community._utilsr   r2   r   r   r%   r-   r,   <module>rn      s>     9 9 9 / . - F & =44f) fr-   