Ë
    uPêje  ã                   ó¨   — d Z ddlZddlmZ ddl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 dd	lmZmZmZ d
dlmZmZmZ  G d„ dee«      Zy)z…
Transformation logic for IBM watsonx.ai's /ml/v1/text/rerank endpoint.

Docs - https://cloud.ibm.com/apidocs/watsonx-ai#text-rerank
é    N)ÚMapping)ÚAnyÚFinalÚcast)ÚLiteLLMLoggingObj)ÚBaseRerankConfig)Úget_secret_str)ÚWatsonXAIEndpoint)ÚRerankResponseÚRerankResponseMetaÚRerankTokensé   )ÚIBMWatsonXMixinÚ_generate_watsonx_tokenÚ_get_api_paramsc                   óš  — e Zd ZdZ	 d dedz  dededz  defd„Zde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z  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	 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y)#ÚIBMWatsonXRerankConfigz1
    IBM watsonx.ai Rerank API configuration
    NÚapi_baseÚmodelÚoptional_paramsÚreturnc                 óØ   — | j                  |¬«      }t        j                  j                  }|j	                  d«      |z   }|xs i }| j                  ||j                  dd «      ¬«      }|S )N)r   ú/Úapi_version)Úurlr   )Ú_get_base_urlr
   ÚRERANKÚvalueÚrstripÚ_add_api_version_to_urlÚget)	Úselfr   r   r   Úbase_urlÚendpointr   ÚparamsÚcomplete_urls	            úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/watsonx/rerank/transformation.pyÚget_complete_urlz'IBMWatsonXRerankConfig.get_complete_url!   sp   € ð ×,Ñ,°hÐ,Ó?ˆÜ+×2Ñ2×8Ñ8ˆà—_‘_ SÓ)¨HÑ4ˆà'Ò-¨2ˆà"×:Ñ:¸sÐQW×Q[ÑQ[Ð\iÐkoÓQpÐ:ÓrˆØÐó    c                 ó
   — g d¢S )N)ÚqueryÚ	documentsÚtop_nÚreturn_documentsÚmax_tokens_per_doc© )r"   r   s     r'   Ú"get_supported_cohere_rerank_paramsz9IBMWatsonXRerankConfig.get_supported_cohere_rerank_params1   s   € ò
ð 	
r)   ÚheadersÚapi_keyÚlitellm_paramsc                 óN  — |xs i }dddœ}d|v ri |¥|¥S t        t        d z  |j                  dd «      xs t        d«      «      }t        t        d z  |j                  dd «      xs t        d«      «      }|r	d|› �|d<   n |r	d	|› �|d<   nt	        ||¬
«      }d|› �|d<   i |¥|¥S )Nzapplication/json)zContent-TypeÚAcceptÚAuthorizationÚtokenÚWATSONX_TOKENÚzen_api_keyÚWATSONX_ZENAPIKEYzBearer z
ZenApiKey )r3   r8   )r   ÚstrÚpopr	   r   )	r"   r2   r   r3   r   r4   Údefault_headersr8   r:   s	            r'   Úvalidate_environmentz+IBMWatsonXRerankConfig.validate_environment:   sç   € ð *Ò/¨Rˆð /Ø(ñ"
ˆð
 ˜gÑ%Ø1�oÐ1¨Ð1Ð1ÜÜ�$‰JØ×Ñ ¨Ó.ÒQ´.ÀÓ2Qó
ˆô "Ü�$‰JØ×Ñ ¨tÓ4Ò[¼ÐGZÓ8[ó
ˆñ Ø)0°°Ð'8ˆG�OÒ$ÙØ)3°K°=Ð'AˆG�OÒ$ä+°GÀ5ÔIˆEà)0°°Ð'8ˆG�OÑ$Ø-�/Ð- WÐ-Ð-r)   Únon_default_paramsÚdrop_paramsr+   r,   Úcustom_llm_providerr-   Úrank_fieldsr.   Úmax_chunks_per_docr/   Úinstructionc                 ó  — i }|�ö|j                  «       D ]ã  \  }}|dk(  r|�||d<   Œ|dk(  r*|�(|D �cg c]  }t        |t        «      rd|in|‘Œ c}|d<   ŒB|dk(  r(|�&||j                  di «      j                  di «      d<   Œo|dk(  r8|�6t        |t        «      r&||j                  di «      j                  di «      d<   Œ¬|d	k(  r|�||j                  di «      d
<   ŒÉ|dk(  r|�||d<   ŒÖ|dk(  sŒÜ|€Œß||d<   Œå t        |«      S c c}w )zJ
        Map Cohere rerank params to IBM watsonx.ai rerank params
        r+   r,   ÚtextÚinputsr-   Ú
parametersÚreturn_optionsr.   r/   Útruncate_input_tokensÚ
project_idÚspace_id)ÚitemsÚ
isinstancer<   Ú
setdefaultÚboolÚdict)r"   r@   r   rA   r+   r,   rB   r-   rC   r.   rD   r/   rE   Úoptional_rerank_paramsÚkÚvÚels                    r'   Úmap_cohere_rerank_paramsz/IBMWatsonXRerankConfig.map_cohere_rerank_params]   sU  € ð$ )+ÐØÐ)Ø*×0Ñ0Ó2ò ;‘��1Ø˜’< A MØ67Ð*¨7Ò3Ø˜+Ò%¨!¨-ØnoÖ7pÐhjÌ
ÐSUÔWZÔH[¸À¹ÐacÑ8cÒ7pÐ*¨8Ò4Ø˜'’\ a mØtuÐ*×5Ñ5°lÀBÓG×RÑRÐScÐegÓhÐipÒqØÐ,Ò,°°Ä:ÈaÔQUÔCVØuvÐ*×5Ñ5°lÀBÓG×RÑRÐScÐegÓhÐiqÒrØÐ.Ò.°1°=ØcdÐ*×5Ñ5°lÀBÓGÐH_Ò`ð ˜,Ò&¨1¨=Ø;<Ð*¨<Ò8Ø˜*“_¨©Ø9:Ð*¨:Ò6ð!;ô$ Ð*Ó+Ð+ùò 8qs   ³DrS   c                 óL   — t        ||¬«      }| j                  ||¬«      }||z  S )zC
        Transform request to IBM watsonx.ai rerank format
        )r%   r   )r   Ú
api_params)r   Ú_prepare_payload)r"   r   rS   r2   r4   Úwatsonx_api_paramsÚwatsonx_auth_payloads          r'   Útransform_rerank_requestz/IBMWatsonXRerankConfig.transform_rerank_request…   s=   € ô %4Ð;QÐY^Ô$_ÐØ&*×&;Ñ&;ØØ)ð '<ó '
Ðð
 &Ð(<Ñ<Ð<r)   Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	                 ón  — 	 |j                  «       }	|	j                  d«      }|€t        d|	› �«      ‚g }|D ]H  }|d   |d   dœ}d	|v r&t        |d	   t        «      rd
|d	   i|d<   n|d	   |d<   |j                  |«       ŒJ |	j                  d«      xs0 |	j                  d«      xs t        t        j                  «       «      }t        |	j                  dd«      ¬«      }t        |¬«      }t        |||¬«      S # t        $ r0}
| j                  d|
› �|j                  |j                  ¬«      ‚d}
~
ww xY w)z[
        Transform IBM watsonx.ai rerank response to LiteLLM RerankResponse format
        zFailed to parse response: )Úerror_messageÚstatus_coder2   NÚresultsz!No results found in the response=ÚindexÚscore)rf   Úrelevance_scoreÚinputrG   ÚdocumentÚidÚmodel_idÚinput_token_countr   )Úinput_tokens)Útokens)rk   re   Úmeta)ÚjsonÚ	ExceptionÚget_error_classrd   r2   r!   Ú
ValueErrorrO   r<   ÚappendÚuuidÚuuid4r   r   r   )r"   r   r^   r_   r`   r3   ra   r   r4   Úraw_response_jsonÚeÚ_resultsÚtransformed_resultsÚresultÚtransformed_resultÚresponse_idÚ_tokensÚrerank_metas                     r'   Útransform_rerank_responsez0IBMWatsonXRerankConfig.transform_rerank_response—   sw  € ð	Ø'3×'8Ñ'8Ó':Ðð .?×-BÑ-BÀ9Ó-MˆØÐÜÐ@ÐARÐ@SÐTÓUÐUà%'Ðàò 	;ˆFà ™Ø#)¨'¡?ñ2Ðð
 ˜&Ñ Ü˜f W™o¬sÔ3Ø6<¸fÀW¹oÐ5NÐ& zÒ2à5;¸G±_Ð& zÑ2à×&Ñ&Ð'9Õ:ð	;ð /×2Ñ2°4Ó8ÒrÐ<M×<QÑ<QÐR\Ó<]ÒrÔadÔei×eoÑeoÓeqÓarˆô &Ø*×.Ñ.Ð/BÀAÓFô
ˆô 0°wÔ?ˆäØØ'Øô
ð 	
øôG ò 	Ø×&Ñ&Ø :¸1¸#Ð>Ø(×4Ñ4Ø$×,Ñ,ð 'ó ð ûð	ús   ‚C; Ã;	D4Ä+D/Ä/D4)N)NNN)NNNTNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   rR   r(   Úlistr1   r   Úobjectr?   rQ   r   ÚintrW   r]   ÚhttpxÚResponser   r   r�   r0   r)   r'   r   r      s8  „ ñð (,ñ	à˜‘*ðð ðð  ™ð	ð
 
óð 
¸ð 
Àó 
ð #Ø'+Ø6:ñ!.àð!.ð ð!.ð �t‘ð	!.ð
  ™ð!.ð    V Ñ,¨tÑ3ð!.ð 
ó!.ðT +/Ø Ø(,Ø(,Ø)-Ø)-Ø"&ñ&,à  4™Kð&,ð ð&,ð ð	&,ð
 ð&,ð ˜˜d 3¨ 8™nÑ,Ñ-ð&,ð ! 4™Zð&,ð �T‰zð&,ð ˜#‘Y Ñ%ð&,ð  ™+ð&,ð   $™Jð&,ð   $™Jð&,ð ˜4‘Zð&,ð 
ó&,ðZ '+ñ=àð=ð !%ð=ð ð	=ð
 ˜t™ð=ð 
ó=ð0 #ØØ "Ø!ñ7
àð7
ð —n‘nð7
ð 'ð	7
ð
 'ð7
ð �t‘ð7
ð ð7
ð ð7
ð ð7
ð 
ô7
r)   r   )r…   rv   Úcollections.abcr   Útypingr   r   r   r‰   Ú)litellm.llms.base_llm.chat.transformationr   Ú+litellm.llms.base_llm.rerank.transformationr   Úlitellm.secret_managers.mainr	   Úlitellm.types.llms.watsonxr
   Úlitellm.types.rerankr   r   r   Úcommon_utilsr   r   r   r   r0   r)   r'   ú<module>r“      sM   ðñó Ý #ß #Ñ #ã å GÝ HÝ 7õ÷ñ ÷ UÑ Tôr
˜_Ð.>õ r
r)   