
    g                         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       _/var/www/openai/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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)billed_unitstokensNresultsindexrelevanceScore)rB   relevance_scorez!No results found in the response=id)rE   rA   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_responseW   s     *FHLL",EF;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   rR   rG   r+   r)   r   r      sR    eCI./	!	":
} 
AU 
2
D 
^ 
r+   r   )__doc__rJ   typingr   r   r   litellm.types.llms.bedrockr   r   r   r	   r
   r   r   r   r   litellm.types.rerankr   r   r   r   r   r   r   rG   r+   r)   <module>r[      s:     ( (
 
 
 V
 V
r+   