o
    ưi#                     @   s   d Z ddlmZmZ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mZmZmZ ddlmZ d	d
lmZ G dd deZdS )zk
Transformation logic for Voyage AI's /v1/rerank endpoint.

Docs - https://docs.voyageai.com/docs/reranker
    )AnyDictListOptionalTupleUnionN)LiteLLMLoggingObj)BaseRerankConfig)get_secret_str)RerankBilledUnitsRerankResponseRerankResponseMetaRerankTokens)	ModelInfo   VoyageErrorc                   @   s  e Zd ZdedefddZ						d-dededed	ed
ee	ee
eef f  dee dee deee  dee dee dee de
fddZ	d.dee dedee defddZdede
de
de
fddZdi i i fdedejdededee de
de
d e
defd!d"Z		d/de
dedee dee de
f
d#d$Z			d0dedee d%ee d&ee deeef f
d'd(Zd)ed*ede	eejf fd+d,ZdS )1VoyageRerankConfigmodelreturnc                 C   s   g dS )N)query	documentstop_nreturn_documents )selfr   r   r   `/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/voyage/rerank/transformation.py"get_supported_cohere_rerank_params   s   z5VoyageRerankConfig.get_supported_cohere_rerank_paramsNTnon_default_paramsdrop_paramsr   r   custom_llm_providerr   rank_fieldsr   max_chunks_per_docmax_tokens_per_docc                 C   s.   ||d}|d ur||d< |	d ur|	|d< |S )N)r   r   Ztop_kr   r   )r   r   r   r   r   r   r    r   r!   r   r"   r#   optional_paramsr   r   r   map_cohere_rerank_params   s   
z+VoyageRerankConfig.map_cohere_rerank_paramsapi_baser$   c                 C   sF   |d u rdS | d}|ds!|dr| d}|S | d}|S )Nz"https://api.voyageai.com/v1/rerank/z
/v1/rerankz/v1z/rerank)rstripendswith)r   r&   r   r$   r   r   r   get_complete_url6   s   




z#VoyageRerankConfig.get_complete_urloptional_rerank_paramsheadersc                 C   s   d|i|S )Nr   r   )r   r   r+   r,   r   r   r   transform_rerank_requestF   s   z+VoyageRerankConfig.transform_rerank_requestraw_responsemodel_responselogging_objapi_keyrequest_datalitellm_paramsc	                 C   s.  |j dkrt|j|j d|j|jd z| }	W n ty,   td|j |j dw |	d}
|
d u r=td|	 g }|
D ]*}|d |d d	}d
|v rft|d
 t	r`d|d
 i|d
< n|d
 |d
< |
| qA|	di }|dd}t|d}t|dd}t||d}t|	dd| ||dS )N   )messagestatus_code)original_responsezFailed to parse response: dataz!No results found in the response=indexrelevance_score)r9   r:   Zdocumenttextusagetotal_tokensr   )r=   )Zinput_tokensZoutput_tokens)billed_unitstokensidzvoyage-rerank-)r@   resultsmeta)r6   r   r;   Z	post_calljson	Exceptionget
ValueError
isinstancestrappendr   r   r   r   )r   r   r.   r/   r0   r1   r2   r$   r3   Z_json_responseZ_resultsZtransformed_resultsresultZtransformed_resultr<   r=   Z_billed_units_tokensZrerank_metar   r   r   transform_rerank_responseK   sH   



z,VoyageRerankConfig.transform_rerank_responsec                 C   s8   |d u rt dpt d}|d u rtdd| ddS )NZVOYAGE_API_KEYZVOYAGE_AI_API_KEYzWVoyage AI API key is required. Set via `api_key` parameter or `VOYAGE_API_KEY` env var.zBearer zapplication/json)Authorizationzcontent-type)r
   rF   )r   r,   r   r1   r$   r   r   r   validate_environment   s   z'VoyageRerankConfig.validate_environmentr>   
model_infoc                 C   sN   |d u sd|vs|d d u s|d u rdS | d}|d u rdS |d | dfS )NZinput_cost_per_token)        rP   r=   rP   )rE   )r   r   r    r>   rO   r=   r   r   r   calculate_rerank_cost   s   
z(VoyageRerankConfig.calculate_rerank_costerror_messager6   c                 C   s   t |||dS )N)r5   r6   r,   r   )r   rR   r6   r,   r   r   r   get_error_class   s   z"VoyageRerankConfig.get_error_class)NNNTNN)N)NN)NNN)__name__
__module____qualname__rH   listr   dictboolr   r   r   r   r   intr%   r*   r-   httpxResponser   r   rL   rN   r   r   r   floatrQ   ZHeadersrS   r   r   r   r   r      s    

	



	

=


r   )__doc__typingr   r   r   r   r   r   r[   Z)litellm.llms.base_llm.chat.transformationr   Z+litellm.llms.base_llm.rerank.transformationr	   Zlitellm.secret_managers.mainr
   Zlitellm.types.rerankr   r   r   r   Zlitellm.types.utilsr   Zembedding.transformationr   r   r   r   r   r   <module>   s     