Ë
    uPêjX$  ã                   ó    — d Z ddlmZ ddlmZmZ ddl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 dd	lmZ dd
lmZmZmZmZ  G d„ dee«      Zy)z«
Translates from Cohere's `/v1/rerank` input format to Vertex AI Discovery Engine's `/rank` input format.

Why separate file? Make it easy to see how transformation works
é    )ÚMapping)ÚAnyÚFinalN)ÚLogging)ÚBaseRerankConfig)Ú)vertex_request_labels_from_litellm_params)Ú
VertexBase)Úget_secret_str)ÚRerankBilledUnitsÚRerankResponseÚRerankResponseMetaÚRerankResponseResultc                   ó¨  ‡ — e Zd ZdZd!ˆ fd„Z	 d"dedz  dededz  defd„Z	 	 	 d#d	eded
edz  dedz  deee	f   dz  defd„Z
	 d"deded	ededz  def
d„Zdi i i fdedej                  deded
edz  dedededefd„Zdedefd„Z	 	 	 	 	 	 	 d$dededededeeeeef   z     dedz  dedz  dee   dz  dedz  dedz  dedz  dedz  defd „Zˆ xZS )%ÚVertexAIRerankConfigzÆ
    Configuration for Vertex AI Discovery Engine Rerank API

    Reference: https://cloud.google.com/generative-ai-app-builder/docs/ranking#rank_or_rerank_a_set_of_records_according_to_a_query
    ÚreturnNc                 ó"   •— t         ‰| �  «        y ©N)ÚsuperÚ__init__)ÚselfÚ	__class__s    €úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/vertex_ai/rerank/transformation.pyr   zVertexAIRerankConfig.__init__#   s   ø€ Ü‰ÑÕó    Úapi_baseÚmodelÚoptional_paramsc                 ó   — |xs i }| j                  |j                  «       «      }| j                  |j                  «       «      }| j                  ||d¬«      \  }}|xs t	        d«      xs t
        j                  }|st        d«      ‚d|› d�S )zU
        Get the complete URL for the Vertex AI Discovery Engine ranking API
        Ú	vertex_ai©ÚcredentialsÚ
project_idÚcustom_llm_providerÚVERTEXAI_PROJECTz}Vertex AI project ID is required. Please set 'VERTEXAI_PROJECT', 'litellm.vertex_project', or pass 'vertex_project' parameterz3https://discoveryengine.googleapis.com/v1/projects/z</locations/global/rankingConfigs/default_ranking_config:rank)Úsafe_get_vertex_ai_credentialsÚcopyÚsafe_get_vertex_ai_projectÚ_ensure_access_tokenr
   ÚlitellmÚvertex_projectÚ
ValueError)	r   r   r   r   ÚparamsÚvertex_credentialsr)   Ú_r!   s	            r   Úget_complete_urlz%VertexAIRerankConfig.get_complete_url&   s³   € ð (Ò-¨2ˆð %)×$GÑ$GÈÏÉËÓ$VÐØ×8Ñ8¸¿¹»ÓGˆð !×5Ñ5Ø*Ø%Ø +ð 6ó 
Ñˆˆ>ð +Òj¬nÐ=OÓ.PÒjÔT[×TjÑTjˆ
áÜð Póð ð EÀZÀLð  QMð  Nð  	Nr   ÚheadersÚapi_keyÚlitellm_paramsc                 óÒ   — |r|j                  «       ni }| j                  |«      }| j                  |«      }| j                  ||d¬«      \  }	}
d|	› �d|
dœ}d|v r|d   |d<   i |¥|¥S )zW
        Validate and set up authentication for Vertex AI Discovery Engine API
        r   r   zBearer zapplication/json)ÚAuthorizationzContent-TypezX-Goog-User-Projectr3   )r%   r$   r&   r'   )r   r/   r   r0   r   r1   Úvertex_paramsr,   r)   Úaccess_tokenr!   Údefault_headerss               r   Úvalidate_environmentz)VertexAIRerankConfig.validate_environmentH   s¡   € ñ :I˜×3Ñ3Ô5ÈbˆØ$(×$GÑ$GÈÓ$VÐØ $× ?Ñ ?ÀÓ Nˆð $(×#<Ñ#<Ø*Ø%Ø +ð $=ó $
Ñ ˆ�jð  ' | nÐ5Ø.Ø#-ñ"
ˆð ˜gÑ%Ø/6°Ñ/GˆO˜OÑ,ð .�/Ð- WÐ-Ð-r   Úoptional_rerank_paramsc           	      óR  — d|vrt        d«      ‚d|vrt        d«      ‚|d   }|d   }|j                  dd«      }|j                  dd«      }g }	t        |«      D ]¥  \  }
}t        |t        «      r%|}d	j                  |j                  «       dd
 «      }nM|j                  dt	        |«      «      }|j                  dd	j                  |j                  «       dd
 «      «      }|	j                  t	        |
«      ||dœ«       Œ§ |||	dœ}|�||d<   | |d<   t        |«      }|r||d<   |S )z_
        Transform the request from Cohere format to Vertex AI Discovery Engine format
        Úqueryz&query is required for Vertex AI rerankÚ	documentsz*documents is required for Vertex AI rerankÚtop_nNÚreturn_documentsTú é   ÚtextÚtitle)ÚidrA   Úcontent)r   r:   ÚrecordsÚtopNÚignoreRecordDetailsInResponseÚ
userLabels)	r*   ÚgetÚ	enumerateÚ
isinstanceÚstrÚjoinÚsplitÚappendr   )r   r   r8   r/   r1   r:   r;   r<   r=   rD   ÚidxÚdocumentrC   rA   Úrequest_dataÚuser_labelss                   r   Útransform_rerank_requestz-VertexAIRerankConfig.transform_rerank_requestl   sT  € ð Ð0Ñ0ÜÐEÓFÐFØÐ4Ñ4ÜÐIÓJÐJà-¨gÑ6ˆØ1°+Ñ>ˆ	Ø-×1Ñ1°'¸4Ó@ˆØ"8×"<Ñ"<Ð=OÐQUÓ"VÐð ˆÜ& yÓ1ò 		Q‰MˆC�Ü˜(¤CÔ(Ø"�ØŸ™ §¡Ó!1°"°1Ð!5Ó6‘ð #Ÿ,™, v¬s°8«}Ó=�Ø Ÿ™ W¨c¯h©h°w·}±}³ÀrÈÐ7JÓ.KÓL�à�N‰N¤# c£(°UÀwÑOÕPð		Qð ).¸È'ÑRˆàÐØ#(ˆL˜Ñ ð =MÐ8LˆÐ4Ñ5äFÀ~ÓVˆÙØ)4ˆL˜Ñ&àÐr   Úraw_responseÚmodel_responseÚlogging_objrQ   c	                 ó   — 	 |j                  «       }	|	j                  dg «      }g }|D ]W  }d|v r1|j	                  t        |d   «      |j                  dd«      dœ«       Œ8|j	                  t        |d   «      ddœ«       ŒY |j                  d	„ d
¬«       g }|D ]$  }|j	                  t        |d   |d   ¬«      «       Œ& t        t        t        |«      ¬«      ¬«      }t        d|› �||¬«      S # t        $ r}
t        d|
› �«      ‚d}
~
ww xY w)zP
        Transform Vertex AI Discovery Engine response to Cohere format
        zFailed to parse response: NrD   ÚscorerB   g        )ÚindexÚrelevance_scoreg      ð?c                 ó   — | d   S )NrZ   © )Úxs    r   ú<lambda>z@VertexAIRerankConfig.transform_rerank_response.<locals>.<lambda>É   s   €  1Ð%6Ñ#7€ r   T)ÚkeyÚreverserY   rZ   )Úsearch_units)Úbilled_unitsÚvertex_ai_rerank_)rB   ÚresultsÚmeta)ÚjsonÚ	Exceptionr*   rH   rN   ÚintÚsortr   r   r   Úlenr   )r   r   rT   rU   rV   r0   rQ   r   r1   Úraw_response_jsonÚerD   rd   ÚrecordÚrerank_resultsÚresultre   s                    r   Útransform_rerank_responsez.VertexAIRerankConfig.transform_rerank_responseœ   s7  € ð	?Ø'3×'8Ñ'8Ó':Ðð
 +×.Ñ.¨y¸"Ó=ˆð ˆØò 	ˆFà˜&Ñ à—‘ä!$ V¨D¡\Ó!2Ø+1¯:©:°g¸sÓ+Cñõð —‘ä!$ V¨D¡\Ó!2Ø+.ñõð	ð* 	�‰Ñ7ÀˆÔFð !#ˆØò 	ˆFØ×!Ñ!Ü$¨6°'©?ÈFÐSdÑLeÔfõð	ô )Ô6GÔUXÐY`ÓUaÔ6bÔcˆäÐ#4°U°GÐ!<ÀnÐ[_Ô`Ð`øôU ò 	?ÜÐ9¸!¸Ð=Ó>Ð>ûð	?ús   ‚C1 Ã1	DÃ:DÄDc                 ó
   — g d¢S )N©r:   r;   r<   r=   r\   )r   r   s     r   Ú"get_supported_cohere_rerank_paramsz7VertexAIRerankConfig.get_supported_cohere_rerank_paramsØ   s   € ò
ð 	
r   Únon_default_paramsÚdrop_paramsr:   r;   r"   r<   Úrank_fieldsr=   Úmax_chunks_per_docÚmax_tokens_per_docÚinstructionc                 ó6   — ||||	dœ}|j                  |«       |S )z>
        Map Cohere rerank params to Vertex AI format
        rr   )Úupdate)r   rt   r   ru   r:   r;   r"   r<   rv   r=   rw   rx   ry   ro   s                 r   Úmap_cohere_rerank_paramsz-VertexAIRerankConfig.map_cohere_rerank_paramsà   s+   € ð& Ø"ØØ 0ñ	
ˆð 	�‰Ð(Ô)Øˆr   )r   Nr   )NNN)NNNTNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rK   Údictr.   r   Úobjectr7   rS   ÚhttpxÚResponser   ÚLiteLLMLoggingObjrp   Úlistrs   Úboolr   rh   r|   Ú__classcell__)r   s   @r   r   r      sK  ø„ ñõð (,ñ	 Nà˜‘*ð Nð ð Nð  ™ð	 Nð
 
ó NðL #Ø'+Ø6:ñ".àð".ð ð".ð �t‘ð	".ð
  ™ð".ð    V Ñ,¨tÑ3ð".ð 
ó".ðR '+ñ.àð.ð !%ð.ð ð	.ð
 ˜t™ð.ð 
ó.ðl #ØØ "Ø!ñ:aàð:að —n‘nð:að 'ð	:að
 'ð:að �t‘ð:að ð:að ð:að ð:að 
ó:aðx
¸ð 
Àó 
ð +/Ø Ø(,Ø(,Ø)-Ø)-Ø"&ñà ðð ðð ð	ð
 ðð ˜˜d 3¨ 8™nÑ,Ñ-ðð ! 4™Zðð �T‰zðð ˜#‘Y Ñ%ðð  ™+ðð   $™Jðð   $™Jðð ˜4‘Zðð 
÷r   r   )r€   Úcollections.abcr   Útypingr   r   rƒ   r(   Ú*litellm.litellm_core_utils.litellm_loggingr   r…   Ú+litellm.llms.base_llm.rerank.transformationr   Ú#litellm.llms.vertex_ai.common_utilsr   Ú&litellm.llms.vertex_ai.vertex_llm_baser	   Úlitellm.secret_managers.mainr
   Úlitellm.types.rerankr   r   r   r   r   r\   r   r   ú<module>r‘      sF   ðñõ $ß ã ã Ý SÝ Hõõ >Ý 7÷ó ô]Ð+¨Zõ ]r   