o
    ưi                     @   s   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZmZmZmZmZmZ G dd dZdS )	z
Translates from Cohere's `/v1/rerank` input format to Bedrock's `/rerank` input format.

Why separate file? Make it easy to see how transformation works
    )uuid)ListOptionalUnion)	*BedrockRerankBedrockRerankingConfigurationBedrockRerankConfiguration!BedrockRerankInlineDocumentSourceBedrockRerankModelConfigurationBedrockRerankQueryBedrockRerankRequestBedrockRerankSourceBedrockRerankTextDocumentBedrockRerankTextQuery)RerankBilledUnitsRerankRequestRerankResponseRerankResponseMetaRerankResponseResultRerankTokensc                   @   sR   e Zd Zdeeeef  dee fddZde	de
fddZdedefd	d
ZdS )BedrockRerankConfig	documentsreturnc                 C   sX   g }|D ]%}t |tr|ttt|ddddd q|tt|dddd q|S )zT
        Transform the sources from RerankRequest format to Bedrock format.
        textTEXT)ZtextDocumenttypeZINLINE)ZinlineDocumentSourcer   JSON)ZjsonDocumentr   )
isinstancestrappendr   r   r   )selfr   _sourcesZdocument r"   a/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/bedrock/rerank/transformation.py_transform_sources    s*   

z&BedrockRerankConfig._transform_sourcesrequest_datac                 C   sP   |  |j}ttt|jdddgttt|j	d|j
pt|jddd|dS )	zT
        Transform the request from RerankRequest format to Bedrock format.
        r   r   )Z	textQueryr   )ZmodelArn)ZmodelConfigurationZnumberOfResultsZBEDROCK_RERANKING_MODEL)ZbedrockRerankingConfigurationr   )ZqueriesZrerankingConfigurationsources)r$   r   r   r
   r   queryr   r   r	   modelZtop_nlen)r    r%   r!   r"   r"   r#   _transform_request=   s$   
	z&BedrockRerankConfig._transform_requestresponsec                 C   s   t di |dddi}tdi |di }t||d}d}|d}|r.dd |D }|du r9td	| t|d
pDtt ||dS )z
        Transform the response from Bedrock into the RerankResponse format.

        example input:
        {"results":[{"index":0,"relevanceScore":0.6847912669181824},{"index":1,"relevanceScore":0.5980774760246277}]}
        usageZsearch_units   )Zbilled_unitstokensNresultsc                 S   s$   g | ]}t |d |ddqS )indexZrelevanceScore)r0   Zrelevance_score)r   get).0resultr"   r"   r#   
<listcomp>g   s    z;BedrockRerankConfig._transform_response.<locals>.<listcomp>z!No results found in the response=id)r5   r/   metar"   )	r   r1   r   r   
ValueErrorr   r   r   uuid4)r    r+   Z_billed_units_tokensZrerank_metaZ_resultsZbedrock_resultsr"   r"   r#   _transform_responseV   s$   
z'BedrockRerankConfig._transform_responseN)__name__
__module____qualname__r   r   r   dictr   r$   r   r   r*   r   r:   r"   r"   r"   r#   r      s    
r   N)__doc__Zlitellm._uuidr   typingr   r   r   Zlitellm.types.llms.bedrockr   r   r   r	   r
   r   r   r   r   Zlitellm.types.rerankr   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s    , 
