
    h                         d Z ddl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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 Infinity's  `/v1/rerank` format. 

Why separate file? Make it easy to see how transformation works
    N)ListOptional)Logging)CohereRerankConfig)get_secret_str)RerankBilledUnitsRerankResponseRerankResponseDocumentRerankResponseMetaRerankResponseResultRerankTokens   )InfinityErrorc                       e Zd Zdee   dedefdZ	 ddededee   def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Zy)InfinityRerankConfigapi_basemodelreturnc                 n    |t        d      |j                  d      }|j                  d      s| d}|S )Nz(api_base is required for Infinity rerank/z/rerank)
ValueErrorrstripendswith)selfr   r   s      g/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/infinity/rerank/transformation.pyget_complete_urlz%InfinityRerankConfig.get_complete_url   sA    GHH??3'  +"7+H    Nheadersapi_keyc                     |*t        d      xs t        d      xs t        j                  }d| ddd}d|v r|d   |d<   i ||S )NINFINITY_API_KEYzbearer zapplication/json)Authorizationacceptzcontent-typer"   )r   litellminfinity_key)r   r   r   r   default_headerss        r   validate_environmentz)InfinityRerankConfig.validate_environment&   sw     ?12 (!"45(''   'wi0(.
 g%/6/GOO, ./-W--r   raw_responsemodel_responselogging_objrequest_dataoptional_paramslitellm_paramsc	                 p   	 |j                         }	t        di |	j                  di       }
t        |	j                  di       j                  dd      |	j                  di       j                  dd      |	j                  di       j                  dd      z
        }t        |
|      }g }|	j                  d      r|	j                  d      D ]m  }t        |j                  d	      |j                  d
            }|j                  d      rt        |j                  d            |d<   |j                  |       o |t        d|	       t        |	j                  d      xs t        t        j                                ||      S # t        $ r" t        |j                  |j                        w xY w)z
        Transform Infinity rerank response

        No transformation required, Infinity follows Cohere API response format
        )messagestatus_codeusageprompt_tokensr   total_tokens)input_tokensoutput_tokens)billed_unitstokensresultsindexrelevance_score)r9   r:   document)textz!No results found in the response=id)r=   r8   meta )json	Exceptionr   r<   r0   r   getr   r   r   r
   appendr   r	   struuiduuid4)r   r   r(   r)   r*   r   r+   r,   r-   raw_response_json_billed_units_tokensrerank_metacohere_resultsresult_rerank_responses                   r   transform_rerank_responsez.InfinityRerankConfig.transform_rerank_response@   s    	 , 1 1 3 *O,=,A,A'2,NO*..w;??QRS!%%gr266~qI#''488!LM
 )mGT57  ++//	:#7 **W-$*JJ/@$A$  ::j)3I#ZZ
34$Z0 %%&67 ; !@AR@STUU $$T*?c$**,.?"
 	
=  	$))|7O7O 	s   F
 
+F5)N)__name__
__module____qualname__r   rD   r   dictr'   httpxResponser	   LiteLLMLoggingObjrN   r?   r   r   r   r      s    # s s  "&	.. . #	.
 
.@ "& "!4
4
 nn4
 '	4

 '4
 #4
 4
 4
 4
 
4
r   r   )__doc__rE   typingr   r   rS   r$   *litellm.litellm_core_utils.litellm_loggingr   rU   )litellm.llms.cohere.rerank.transformationr   litellm.secret_managers.mainr   litellm.types.rerankr   r	   r
   r   r   r   common_utilsr   r   r?   r   r   <module>r]      s?     !   S H 7  )X
- X
r   