
    hB                         d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZmZmZ ddlmZ  G d	 d
e      Zy)z
Transformation logic from Cohere's /v1/rerank format to Jina AI's  `/v1/rerank` format. 

Why separate file? Make it easy to see how transformation works

Docs - https://jina.ai/reranker
    N)AnyDictListOptionalTupleUnion)URLResponse)LiteLLMLoggingObj)BaseRerankConfig)OptionalRerankParamsRerankBilledUnitsRerankResponseRerankResponseMetaRerankTokens)	ModelInfoc                   v   e Zd Zdedef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Zdee   dedefdZdedede
de
fdZdi i i fdededededee   de
de
de
defdZ	 d"de
dedee   de
fdZ	 	 	 d#ded	ee   dee   dee   deeef   f
d Zy)$JinaAIRerankConfigmodelreturnc                 
    g dS )N)querytop_n	documentsreturn_documents )selfr   s     f/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/jina_ai/rerank/transformation.py"get_supported_cohere_rerank_paramsz5JinaAIRerankConfig.get_supported_cohere_rerank_params   s    
 	
    Nnon_default_paramsdrop_paramsr   r   custom_llm_providerr   rank_fieldsr   max_chunks_per_docmax_tokens_per_docc                     i }| j                  |      }|j                         D ]  \  }}||v s|||<    t        di |S )Nr   )r   itemsr   )r   r!   r   r"   r   r   r#   r   r$   r   r%   r&   optional_paramssupported_paramskvs                   r   map_cohere_rerank_paramsz+JinaAIRerankConfig.map_cohere_rerank_params#   s[     BB5I&,,.DAq$$%&" / $ 

 	
r    api_basec                 \    d}|yt        |      }t        |j                  |            }|S )Nz
/v1/rerankzhttps://api.jina.ai/v1/rerank)path)r	   str	copy_with)r   r.   r   	base_pathbasecleaned_bases         r   get_complete_urlz#JinaAIRerankConfig.get_complete_url:   s4     	28}4>>y>9:r    optional_rerank_paramsheadersc                     d|i|S )Nr   r   )r   r   r7   r8   s       r   transform_rerank_requestz+JinaAIRerankConfig.transform_rerank_requestE   s     9"899r    raw_responsemodel_responselogging_objapi_keyrequest_datar)   litellm_paramsc	                    |j                   dk7  rt        |j                        |j                  |j                         |j	                         }	t        d	i |	j                  di       }
t        d	i |	j                  di       }t        |
|      }|	j                  d      }|t        d|	       t        |	j                  d      xs t        t        j                               ||      S )
N   )original_responseusage)billed_unitstokensresultsz!No results found in the response=id)rH   rG   metar   )status_code	Exceptiontext	post_calljsonr   getr   r   
ValueErrorr   r1   uuiduuid4)r   r   r;   r<   r=   r>   r?   r)   r@   _json_response_billed_units_tokensrerank_meta_resultss                 r   transform_rerank_responsez,JinaAIRerankConfig.transform_rerank_responseJ   s     ##s*L--..0A0AB%**,)LN,>,>w,KLA!3!3GR!@A(mGT)7););I)F@@PQRR!!$'<3tzz|+<
 	
r    c                 .    |t        d      ddd| dS )NzXapi_key is required. Set via `api_key` parameter or `JINA_API_KEY` environment variable.zapplication/jsonzBearer )acceptzcontent-typeauthorization)rP   )r   r8   r   r>   s       r   validate_environmentz'JinaAIRerankConfig.validate_environmentk   s5     ?j  ).&wi0
 	
r    rE   
model_infoc                 ^    |d|vs|d   |y|j                  d      }|y|d   |z  }|dfS )zG
        Jina AI reranker is priced at $0.000000018 per token.
        input_cost_per_token)        r`   total_tokensr`   )rO   )r   r   r#   rE   r]   ra   
input_costs          r   calculate_rerank_costz(JinaAIRerankConfig.calculate_rerank_costx   sZ     %Z7019##''7 67,F
3r    )NNNTNN)N)NNN)__name__
__module____qualname__r1   listr   dictboolr   r   r   r   r   intr   r-   r6   r:   r
   r   r   rX   r\   r   r   r   floatrc   r   r    r   r   r      s   
 
 
 .2#+/+/,0,0
 
 
 	

 
 c4S>123
 &c]
 }
 d3i(
 #4.
 %SM
 %SM
 

.	# 	s 	s 	::2F:QU:	: "& "!

 
 '	

 '
 #
 
 
 
 

D CG

$'
2:3-
	
  .248*. &c] 01	
 Y' 
ue|	r    r   )__doc__rQ   typingr   r   r   r   r   r   httpxr	   r
   )litellm.llms.base_llm.chat.transformationr   +litellm.llms.base_llm.rerank.transformationr   litellm.types.rerankr   r   r   r   r   litellm.types.utilsr   r   r   r    r   <module>rs      s<     : :  G H  *u) ur    