
    g7                         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 ddl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RerankResponseMetaRerankTokens)RerankResponse   )InfinityErrorc                   ~    e Z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)InfinityRerankConfigNheadersmodelapi_keyreturnc                     |*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)selfr   r   r   default_headerss        `/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/infinity/rerank/transformation.pyvalidate_environmentz)InfinityRerankConfig.validate_environment   sw     ?12 (!"45(''   'wi0(.
 g%/6/GOO, ./-W--    raw_responsemodel_responselogging_objrequest_dataoptional_paramslitellm_paramsc	                 j   	 |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        |
|      }|	j                  d      }|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resultsz!No results found in the response=id)r0   r/   meta )json	Exceptionr   textr'   r   getr
   r	   
ValueErrorr   struuiduuid4)r   r   r   r    r!   r   r"   r#   r$   raw_response_json_billed_units_tokensrerank_meta_resultss                 r   transform_rerank_responsez.InfinityRerankConfig.transform_rerank_response1   s4    	 , 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):)>)>y)I@AR@STUU $$T*?c$**,.?
 	
)  	$))|7O7O 	s   D +D2)N)__name__
__module____qualname__dictr8   r   r   httpxResponser   LiteLLMLoggingObjr@   r2   r   r   r   r      s    
 "&	.. . #	.
 
.@ "& "!*
*
 nn*
 '	*

 '*
 #*
 *
 *
 *
 
*
r   r   )__doc__r9   typingr   r   rE   r   *litellm.litellm_core_utils.litellm_loggingr   rG   )litellm.llms.cohere.rerank.transformationr   litellm.secret_managers.mainr   litellm.types.rerankr   r	   r
   litellm.types.utilsr   common_utilsr   r   r2   r   r   <module>rP      s<     !   S H 7 T T . 'E
- E
r   