
    i                         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      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
    )uuid)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       {/Users/manta/Documents/Projects/TheRoad-I1/.venv/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)rE   relevance_scorez!No results found in the response=id)rH   rD   meta )
r   getr   r   r   
ValueErrorr   r%   r   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 .
 .F	 % **W-$*JJ/?$@ .   @
KLL||D!6S%6
 	
s   2CN)__name__
__module____qualname__r   r   r%   dictr   r+   r   r   r<   r   rT   rJ   r,   r*   r   r      sR    eCI./	!	":
} 
AU 
2 
D  
^  
r,   r   N)__doc__litellm._uuidr   typingr   r   r   litellm.types.llms.bedrockr   r   r	   r
   r   r   r   r   r   litellm.types.rerankr   r   r   r   r   r   r   rJ   r,   r*   <module>r^      s:     ( (
 
 
 W
 W
r,   