
    h                         d Z ddl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      Zy)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
    N)ListOptionalUnion)	*BedrockRerankBedrockRerankingConfigurationBedrockRerankConfiguration!BedrockRerankInlineDocumentSourceBedrockRerankModelConfigurationBedrockRerankQueryBedrockRerankRequestBedrockRerankSourceBedrockRerankTextDocumentBedrockRerankTextQuery)RerankBilledUnitsRerankRequestRerankResponseRerankResponseMetaRerankResponseResultRerankTokensc                   R    e Zd Zdeeeef      dee   fdZde	de
fdZdedefdZy)	BedrockRerankConfig	documentsreturnc           
          g }|D ]k  }t        |t              r2|j                  t        t	        t        |      d      d             E|j                  t        t	        |d      d             m |S )zT
        Transform the sources from RerankRequest format to Bedrock format.
        textTEXT)textDocumenttypeINLINE)inlineDocumentSourcer   JSON)jsonDocumentr   )
isinstancestrappendr   r   r   )selfr   _sourcesdocuments       f/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/bedrock/rerank/transformation.py_transform_sourcesz&BedrockRerankConfig._transform_sources    sx     !H(C('-N)B)Q!'. & '-N)1. &	 "(     request_datac                 *   | j                  |j                        }t        t        t	        |j
                        d      gt        t        t        |j                        |j                  xs t        |j                              d      |      S )	zT
        Transform the request from RerankRequest format to Bedrock format.
        r   r   )	textQueryr   )modelArn)modelConfigurationnumberOfResultsBEDROCK_RERANKING_MODEL)bedrockRerankingConfigurationr   )queriesrerankingConfigurationsources)r*   r   r   r
   r   queryr   r   r	   modeltop_nlen)r&   r,   r'   s      r)   _transform_requestz&BedrockRerankConfig._transform_request=   s     **<+A+AB#"4,:L:LM $>.X'F!-!3!3( %1$6$6$U#l>T>T:U	/ /$ !
 	
r+   responsec           	         t        di |j                  dddi      }t        di |j                  di       }t        ||      }d}|j                  d      }|r8|D cg c]-  }t	        |j                  d      |j                  d      	      / }}|t        d
|       t        |j                  d      xs t        t        j                               ||      S c c}w )z
        Transform the response from Bedrock into the RerankResponse format.

        example input:
        {"results":[{"index":0,"relevanceScore":0.6847912669181824},{"index":1,"relevanceScore":0.5980774760246277}]}
        usagesearch_units   )billed_unitstokensNresultsindexrelevanceScore)rD   relevance_scorez!No results found in the response=id)rG   rC   meta )
r   getr   r   r   
ValueErrorr   r$   uuiduuid4)r&   r<   _billed_units_tokensrerank_meta_resultsbedrock_resultsresults           r)   _transform_responsez'BedrockRerankConfig._transform_responseV   s     * 
ll7^Q$78
 ;gr!:;(mGT9=",,y1 .
 	 % **W-$*JJ/?$@H  @
KLL||D!6S%6
 	
s   2CN)__name__
__module____qualname__r   r   r$   dictr   r*   r   r   r;   r   rT   rI   r+   r)   r   r      sR    eCI./	!	":
} 
AU 
2 
D  
^  
r+   r   )__doc__rL   typingr   r   r   litellm.types.llms.bedrockr   r   r   r	   r
   r   r   r   r   litellm.types.rerankr   r   r   r   r   r   r   rI   r+   r)   <module>r]      s:     ( (
 
 
 W
 W
r+   