Ë
    uPêj¢0  ã                   ó$  — d dl mZ d dlmZmZmZ d dlZd dl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 d d
lmZmZmZmZ  G d„ de	«      Z G d„ de	d¬«      Z G d„ de	d¬«      Z G d„ de	«      Z G d„ de	«      Z G d„ de«      Z y)é    )ÚMapping)ÚAnyÚFinalÚLiteralN)ÚRequiredÚ	TypedDict)Úuuid)ÚLogging©ÚBaseLLMException)ÚBaseRerankConfig)Úget_secret_str)ÚRerankBilledUnitsÚRerankResponseÚRerankResponseMetaÚRerankResponseResultc                   ó   — e Zd ZU ee   ed<   y)ÚNvidiaNimQueryObjectÚtextN)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__© ó    úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/nvidia_nim/rerank/transformation.pyr   r      s   … Ø
�3‰-Ôr   r   c                   ó"   — e Zd ZU eed<   eed<   y)ÚNvidiaNimPassageObjectr   ÚimageN)r   r   r   r   r   r   r   r   r   r      s   … Ø
ƒIØ„Jr   r   F)Útotalc                   ó^   — e Zd ZU ee   ed<   ee   ed<   eee      ed<   e	d   ed<   e
ed<   y)ÚNvidiaNimRerankRequestÚmodelÚqueryÚpassages©ÚNONEÚENDÚtruncateÚtop_kN)r   r   r   r   r   r   r   Úlistr   r   Úintr   r   r   r#   r#      s9   … Ø�C‰=ÓØÐ(Ñ)Ó)Ø�tÐ2Ñ3Ñ4Ó4Ø�mÑ$Ó$Ø„Jr   r#   c                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)ÚNvidiaNimRankingResultÚindexÚlogitN)r   r   r   r   r-   r   Úfloatr   r   r   r/   r/   &   s   … Ø�C‰=ÓØ�E‰?Ôr   r/   c                   ó$   — e Zd ZU eee      ed<   y)ÚNvidiaNimRerankResponseÚrankingsN)r   r   r   r   r,   r/   r   r   r   r   r4   r4   +   s   … Ø�tÐ2Ñ3Ñ4Ô4r   r4   c                   ó  — e Zd ZU dZdZdZeedf   ed<   d)d„Z	d	edef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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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j0                  d"ed#ededz  d$edededefd%„Zd&ed'edeej8                  z  defd(„Zy)-ÚNvidiaNimRerankConfiga  
    Reference: https://docs.api.nvidia.com/nim/reference/nvidia-llama-3_2-nv-rerankqa-1b-v2-infer

    Nvidia NIM rerank API uses a different format:
    - query is an object with 'text' field
    - documents are called 'passages' and have 'text' field
    zhttps://ai.api.nvidia.com)r   .ÚSUPPORTED_PASSAGE_FIELDSÚreturnNc                  ó   — y ©Nr   )Úselfs    r   Ú__init__zNvidiaNimRerankConfig.__init__>   s   € Ør   r$   c                 óD   — |j                  d«      r|t        d«      d S |S )z6Strip 'nvidia_nim/' prefix from model name if present.znvidia_nim/N)Ú
startswithÚlen©r<   r$   s     r   Ú_get_clean_model_namez+NvidiaNimRerankConfig._get_clean_model_nameA   s(   € à×Ñ˜MÔ*Øœ˜]Ó+Ð-Ð.Ð.Øˆr   Úapi_baseÚoptional_paramsc                 ó    — |s| j                   }|j                  d«      }d|v r|S |j                  d«      }| j                  |«      }|› d|› d�S )zì
        Construct the Nvidia NIM rerank URL.

        Format: {api_base}/v1/retrieval/{model}/reranking

        If the user provides a full URL (e.g., {api_base}/v1/retrieval/{model}/reranking),
        it will be used as-is.
        ú/z/retrieval/z/v1z/v1/retrieval/z
/reranking)ÚDEFAULT_NIM_RERANK_API_BASEÚrstripÚremovesuffixrB   )r<   rC   r$   rD   Úclean_models        r   Úget_complete_urlz&NvidiaNimRerankConfig.get_complete_urlG   sf   € ñ Ø×7Ñ7ˆHà—?‘? 3Ó'ˆð ˜HÑ$ØˆOð ×(Ñ(¨Ó/ˆð "×7Ñ7¸Ó>ˆà�˜>¨+¨°jÐAÐAr   c                 ó
   — g d¢S )z>
        Nvidia NIM supports these rerank parameters.
        )r%   Ú	documentsÚtop_nr   rA   s     r   Ú"get_supported_cohere_rerank_paramsz8NvidiaNimRerankConfig.get_supported_cohere_rerank_paramsf   s   € ò
ð 	
r   Únon_default_paramsÚdrop_paramsr%   rM   Úcustom_llm_providerrN   Úrank_fieldsÚreturn_documentsÚmax_chunks_per_docÚmax_tokens_per_docÚinstructionc                 óV   — ||dœ}|�||d<   |r|j                  |«       t        |«      S )a$  
        Map Cohere/OpenAI rerank params to Nvidia NIM format.

        Parameter mapping:
        - top_n (Cohere) -> top_k (Nvidia)

        Nvidia NIM specific params (passed through as-is from non_default_params):
        - truncate: How to truncate input if too long (NONE, END)
        )r%   rM   r+   )ÚupdateÚdict)r<   rP   r$   rQ   r%   rM   rR   rN   rS   rT   rU   rV   rW   Ú!optional_nvidia_nim_rerank_paramss                 r   Úmap_cohere_rerank_paramsz.NvidiaNimRerankConfig.map_cohere_rerank_paramsp   sF   € ð2 Ø"ñD
Ð)ð ÐØ9>Ð-¨gÑ6ñ Ø-×4Ñ4Ð5GÔHÜÐ5Ó6Ð6r   ÚheadersÚapi_keyÚlitellm_paramsc                 ó�   — |€t        d«      xs t        j                  }|€t        d«      ‚d|› �dddœ}d|v r|d   |d<   i |¥|¥S )zB
        Validate that the Nvidia NIM API key is present.
        ÚNVIDIA_NIM_API_KEYzSNvidia NIM API key is required. Please set 'NVIDIA_NIM_API_KEY' in your environmentzBearer zapplication/json)ÚAuthorizationÚacceptzcontent-typerb   )r   Úlitellmr^   Ú
ValueError)r<   r]   r$   r^   rD   r_   Údefault_headerss          r   Úvalidate_environmentz*NvidiaNimRerankConfig.validate_environment–   sr   € ð ˆ?Ü$Ð%9Ó:ÒM¼g¿o¹oˆGàˆ?ÜÐrÓsÐsð  ' w iÐ0Ø(Ø.ñ"
ˆð ˜gÑ%Ø/6°Ñ/GˆO˜OÑ,ð .�/Ð- WÐ-Ð-r   Úoptional_rerank_paramsc                 ó  — d|vrt        d«      ‚d|vrt        d«      ‚|d   }|d   }d|i}g }|D ]Ã  }	t        |	t        «      r|j                  d|	i«       Œ't        |	t        «      rqi }
d| j
                  v rd|	v r|	d   |
d<   d| j
                  v rd|	v r|	d   |
d<   |
r|j                  |
«       Œ�ddl}|j                  d|j                  |	«      i«       Œ¨|j                  dt        |	«      i«       ŒÅ | j                  |«      }|j                  d	d
«      }|||dœ}d|v r%|j                  d«      �|j                  d«      |d<   d|v r+|j                  d«      �|j                  d«      }|dv r||d<   t	        |«      S )a  
        Transform request to Nvidia NIM format.

        Nvidia NIM expects:
        - query as {text: "..."}
        - documents as passages: [{text: "..."}, ...]
        - Optional: truncate (NONE or END), top_k

        Note: optional_rerank_params may contain provider-specific params like 'top_k' and 'truncate'
        that aren't in the OptionalRerankParams TypedDict but are passed through at runtime.
        The mapping from Cohere's 'top_n' to Nvidia's 'top_k' already happened in map_cohere_rerank_params.
        r%   z'query is required for Nvidia NIM rerankrM   z+documents is required for Nvidia NIM rerankr   r    r   NÚ_ú.)r$   r%   r&   r+   r*   r'   )re   Ú
isinstancer   ÚappendrZ   r8   ÚjsonÚdumpsrB   ÚreplaceÚget)r<   r$   rh   r]   r_   r%   rM   Ú	query_objr&   ÚdocÚsupported_fieldsrn   rJ   Úmodel_for_bodyÚrequest_dataÚtruncate_values                   r   Útransform_rerank_requestz.NvidiaNimRerankConfig.transform_rerank_request´   sÊ  € ð& Ð0Ñ0ÜÐFÓGÐGØÐ4Ñ4ÜÐJÓKÐKà-¨gÑ6ˆØ1°+Ñ>ˆ	ð 39¸%°ˆ	ð 9;ˆØò 	4ˆCÜ˜#œsÔ#Ø—‘ ¨ Õ.Ü˜C¤Ô&ð <>Ð Ø˜T×:Ñ:Ñ:¸vÈ¹}Ø/2°6©{Ð$ VÑ,Ø˜d×;Ñ;Ñ;ÀÈ3ÁØ03°G±Ð$ WÑ-Ù#Ø—O‘OÐ$4Õ5ó  à—O‘O V¨T¯Z©Z¸«_Ð$=Õ>à—‘ ¬¨S«Ð 2Õ3ð'	4ð, "×7Ñ7¸Ó>ˆð !,× 3Ñ 3°C¸Ó =ˆð $ØØ ñ7
ˆð Ð,Ñ,Ð1G×1KÑ1KÈGÓ1TÐ1`Ø$:×$>Ñ$>¸wÓ$GˆL˜Ñ!ð Ð/Ñ/Ð4J×4NÑ4NÈzÓ4ZÐ4fØ$:×$>Ñ$>¸zÓ$JˆNØ Ñ0Ø+9�˜ZÑ(ä�LÓ!Ð!r   Úraw_responseÚmodel_responseÚlogging_objrv   c	                 ój  — 	 |j                  «       }	|	}
g }|
j                  dg «      }|j                  dg «      }|D ]E  }|d   |d   dœ}|d   }|t        |«      k  rd||   v rd||   d   i|d<   |j                  |«       ŒG |	j                  d	i «      }|j                  d
d«      }d
|dkD  r|n
t        |«      i}d|i}t        |	j                  d«      xs t        t        j                  «       «      ||¬«      S # t        $ r- t        |j                  |j                  |j
                  ¬«      ‚w xY w)a7  
        Transform Nvidia NIM rerank response to LiteLLM format.

        Nvidia NIM returns (NvidiaNimRerankResponse):
        {
            "rankings": [
                {
                    "index": 0,
                    "logit": 0.123
                }
            ]
        }

        LiteLLM expects (RerankResponse):
        {
            "results": [
                {
                    "index": 0,
                    "relevance_score": 0.123,
                    "document": {"text": "..."}  # optional
                }
            ]
        }
        ©Ústatus_codeÚmessager]   r5   r&   r0   r1   )r0   Úrelevance_scorer   ÚdocumentÚusageÚtotal_tokensr   Úbilled_unitsÚid)r…   ÚresultsÚmeta)rn   Ú	Exceptionr   r~   r   r]   rq   r@   rm   r   r   r	   Úuuid4)r<   r$   ry   rz   r{   r^   rv   rD   r_   Úraw_response_jsonÚnvidia_responser†   r5   Úoriginal_passagesÚrankingÚresult_itemr0   r‚   rƒ   r„   r‡   s                        r   Útransform_rerank_responsez/NvidiaNimRerankConfig.transform_rerank_response  sy  € ðF	Ø'3×'8Ñ'8Ó':Ðð ;Lˆð 68ˆØ)×-Ñ-¨j¸"Ó=ˆð BN×AQÑAQÐR\Ð^`ÓAaÐàò 	(ˆGà  Ñ)Ø#*¨7Ñ#3ñ1ˆKð ! Ñ)ˆEØ”sÐ,Ó-Ò-°&Ð<MÈeÑ<TÑ2TØ+1Ð3DÀUÑ3KÈFÑ3SÐ*T�˜JÑ'à�N‰N˜;Õ'ð	(ð  )×,Ñ,¨W°bÓ9ˆØ#Ÿi™i¨¸Ó:ˆà2@ÐR^ÐabÒRbÁ,ÔhkÐlsÓhtÐ1uˆà+9¸<Ð*HˆäØ ×$Ñ$ TÓ*Ò?¬c´$·*±*³,Ó.?ØØô
ð 	
øôQ ò 	Ü"Ø(×4Ñ4Ø$×)Ñ)Ø$×,Ñ,ôð ð	ús   ‚C< Ã<6D2Úerror_messager~   c                 ó   — t        |||¬«      S )Nr}   r   )r<   r�   r~   r]   s       r   Úget_error_classz%NvidiaNimRerankConfig.get_error_classW  s   € ÜØ#Ø!Øô
ð 	
r   )r9   Nr;   )NNNTNNN)NNN)r   r   r   Ú__doc__rG   r8   Útupler   r   r=   rB   rZ   rK   r,   rO   Úboolr   r-   r\   r   Úobjectrg   rx   ÚhttpxÚResponser   ÚLiteLLMLoggingObjr�   ÚHeadersr   r’   r   r   r   r7   r7   /   s²  … ñð #>Ðð 1:Ð˜e C¨ H™oÓ9óð¨3ð °3ó ð (,ñ	Bà˜‘*ðBð ðBð  ™ð	Bð
 
óBð>
¸ð 
Àó 
ð" +/Ø Ø(,Ø(,Ø)-Ø)-Ø"&ñ$7à  4™Kð$7ð ð$7ð ð	$7ð
 ð$7ð ˜˜d 3¨ 8™nÑ,Ñ-ð$7ð ! 4™Zð$7ð �T‰zð$7ð ˜#‘Y Ñ%ð$7ð  ™+ð$7ð   $™Jð$7ð   $™Jð$7ð ˜4‘Zð$7ð 
ó$7ðT #Ø'+Ø6:ñ.àð.ð ð.ð �t‘ð	.ð
  ™ð.ð    V Ñ,¨tÑ3ð.ð 
ó.ðF '+ñN"àðN"ð !%ðN"ð ð	N"ð
 ˜t™ðN"ð 
óN"ðl #ØØ "Ø!ñQ
àðQ
ð —n‘nðQ
ð 'ð	Q
ð
 'ðQ
ð �t‘ðQ
ð ðQ
ð ðQ
ð ðQ
ð 
óQ
ðf
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvô 
r   r7   )!Úcollections.abcr   Útypingr   r   r   r—   Útyping_extensionsr   r   rd   Úlitellm._uuidr	   Ú*litellm.litellm_core_utils.litellm_loggingr
   r™   Ú)litellm.llms.base_llm.chat.transformationr   Ú+litellm.llms.base_llm.rerank.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.rerankr   r   r   r   r   r   r#   r/   r4   r7   r   r   r   ú<module>r¤      s   ðÝ #ß &Ñ &ã ß 1ã Ý Ý SÝ FÝ HÝ 7÷ó ô˜9ô ô˜Y¨eõ ô
˜Y¨eõ ô˜Yô ô
5˜iô 5ôm
Ð,õ m
r   