
    j_                        d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
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mZmZmZ ddlmZ ddlmZmZ dd	lmZm Z  d
dl!m"Z" d
dl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.  G d de"      Z/y)z9
Handles embedding calls to Bedrock's `/invoke` endpoint
    N)AnyCallableListOptionalTupleUnionget_args)#BEDROCK_EMBEDDING_PROVIDERS_LITERAL)	embedding)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)
get_secret)AmazonEmbeddingRequestCohereEmbeddingRequest)EmbeddingResponseLlmProviders   )
BaseAWSLLM)BedrockError   )AmazonTitanG1Config)&AmazonTitanMultimodalEmbeddingG1Config)AmazonTitanV2Config)BedrockCohereEmbeddingConfig) TwelveLabsMarengoEmbeddingConfigc                      e Zd Zdedeeef   fdZd Zde	e
   de	eeej                  f      deded	edefd
Zde	e   de	eeej                  f      deded	edefdZ	 d#dee   dedede	e   de	e   f
dZ	 	 d$de	e
   de	eeej                  f      dee   dede	e   dededededede	e   de	e   fdZ	 	 d$de	e   de	eeej                  f      dee   dede	e   dededededede	e   de	e   fdZ	 d%dedee   de	e   dedede	ee
ef      de	eeej                  f      de	e   de	e   dedede	e   defd Z	 d%d!ededefd"Zy)&BedrockEmbeddingoptional_paramsreturnc                 L   	 ddl m} |j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  d	d       }|j                  d
d       }	|j                  dd       }
|j                  dd       }|Dt	        dd       }|t        |t              r|}t	        dd       }|t        |t              r|}|d}| j                  ||||||	||
|	      }||fS # t        $ r t        d      w xY w)Nr   )Credentialsz7Missing boto3 to call bedrock. Run 'pip install boto3'.aws_secret_access_keyaws_access_key_idaws_session_tokenaws_region_nameaws_role_nameaws_session_nameaws_profile_nameaws_web_identity_tokenaws_sts_endpointAWS_REGION_NAME
AWS_REGIONz	us-west-2)	r%   r$   r&   r'   r)   r*   r(   r+   r,   )botocore.credentialsr#   ImportErrorpopr   
isinstancestrget_credentials)selfr    r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   litellm_aws_region_namestandard_aws_region_namecredentialss                  }/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/embed/embedding.py_load_credentialsz"BedrockEmbedding._load_credentials(   s{   	Y8
 !0 3 34KT R+//0CTJ+//0CTJ)--.?F'++OTB*../A4H*../A4H!0!4!45Mt!T*../A4H "&01BD&I#&2z'8 #:'1,'E$'3
(#9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 O++Y  	YWXX	Ys   D D#c                    K   y wN )r5   s    r9   async_embeddingsz!BedrockEmbedding.async_embeddings\   s	     s   clienttimeoutapi_baseheadersdatac                 0   |t        |t              sJi }|:t        |t              st        |t              rt	        j
                  |      }||d<   t        |      }n|}	 |j                  ||t        j                  |            }|j                          |j                         S # t        j                  $ r<}|j                  j                  }	t        |	|j                  j                        d }~wt        j                   $ r t        dd      w xY w)Nr@   urlrB   rC   status_codemessage  Timeout error occurred.)r2   r   floatinthttpxTimeoutr   postjsondumpsraise_for_statusHTTPStatusErrorresponserH   r   textTimeoutException
r5   r?   r@   rA   rB   rC   _paramsrU   err
error_codes
             r9   _make_sync_callz BedrockEmbedding._make_sync_call_   s     >FK!@G"gu-GS1I#mmG4G%,	"&w/FF	S{{xtzzRVGW{XH%%' }} $$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss    7B' 'D:7C11$Dc                   K   |t        |t              sdi }|:t        |t              st        |t              rt	        j
                  |      }||d<   t        |t        j                  j                        }n|}	 |j                  ||t        j                  |             d {   }|j                          |j                         S 7 $# t        j                  $ r<}|j                  j                   }	t#        |	|j                  j$                        d }~wt        j&                  $ r t#        dd      w xY ww)Nr@   )paramsllm_providerrE   rG   rJ   rK   )r2   r   rL   rM   rN   rO   r   litellmr   BEDROCKrP   rQ   rR   rS   rT   rU   rH   r   rV   rW   rX   s
             r9   _make_async_callz!BedrockEmbedding._make_async_call{   s     >F4D!EG"gu-GS1I#mmG4G%,	"+W-A-A-I-IF F	S#[[XwTZZX\M][^^H%%' }} _$$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss<   A9D><*C &C'C ;D>C D; 7D$D;;D>response_listmodelprovideris_async_invokec                 x   d}|rt        |      dk(  rd|d   v r|dk(  rt               j                  |d   |      }n|d   j                  dd      }ddlm}m}  |g dd	
      }	 |dd      }
ddlm}  |       }t        |d|       t        |	g||
|      }n|dk(  rt               j                  ||      }nb|dk(  rt               j                  ||      }nA|dk(  rt               j                  ||      }n |dk(  rt               j                  ||      }|t        dj!                  |            |S )zc
        Transforms the response from the Bedrock embedding provider to the OpenAI format.
        Nr   invocationArnr   
twelvelabs)rU   rd    )	EmbeddingUsager   )r   indexobject)prompt_tokenstotal_tokens)HiddenParams_invocation_arn)rC   rd   usagehidden_paramsamazon.titan-embed-image-v1)rc   rd   amazon.titan-embed-text-v1amazon.titan-embed-text-v2:0z?Unable to map model response to known provider format. model={})lenr    _transform_async_invoke_responsegetlitellm.types.utilsrk   rl   litellm.types.llms.baserq   setattrr   r   _transform_responser   r   	Exceptionformat)r5   rc   rd   re   rf   returned_responseinvocation_arnrk   rl   r   rs   rq   rt   s                r9   r~   z$BedrockEmbedding._transform_response   s    :> M"a'=#33<'46WW!.q!1 X  " "/q!1!5!5or!J@% &	
 AA> A ,'8.I$5#"/	%! 55:<PP&35 Q  "
 66$7$9$M$M"/u %N %! 88$7$9$M$M"/u %N %! \)46JJ&35 K  " $QXX 
 !     N
batch_datar8   extra_headersendpoint_urlr'   logging_objapi_keyc           
         g }|D ]  }ddi}|ddi|}| j                  ||||t        j                  |      ||      }|	j                  |d||j                  |j
                  d       | j                  |||j                  |j
                  |      }|	j                  |d|d|i	       |j                  |        | j                  |||
|
      S NContent-Typeapplication/jsonr8   r'   r   r   rC   rB   r   rj   )complete_input_dictrA   rB   inputr   additional_args)r?   r@   rA   rB   rC   r   r   r   original_responser   )rc   rd   re   rf   )
get_request_headersrQ   rR   pre_callrF   rB   r\   	post_callappendr~   r5   r?   r@   r   r8   r   r   r'   rd   r   re   r   rf   	responsesrC   rB   preppedrU   s                     r9   _single_func_embeddingsz(BedrockEmbedding._single_func_embeddings   s$    !#	D%'9:G()+=OO..' /+)ZZ% / G   +/ '&! !  ++  , H !!"*!6 =	 "  X&S V ''#+	 ( 
 	
r   c           
        K   g }|D ]  }ddi}|ddi|}| j                  ||||t        j                  |      ||      }|	j                  |d||j                  |j
                  d       | j                  |||j                  |j
                  |       d {   }|	j                  |d|d|i	       |j                  |        | j                  |||
|
      S 7 Cwr   )
r   rQ   rR   r   rF   rB   rb   r   r   r~   r   s                     r9   _async_single_func_embeddingsz.BedrockEmbedding._async_single_func_embeddings/  s2     !#	D%'9:G()+=OO..' /+)ZZ% / G   +/ '&! !  "22  3  H !!"*!6 =	 "  X&S V ''#+	 ( 
 	
%s   BC CAC r   model_responseprint_verbose
aembeddinglitellm_paramsc                    | j                  |      \  }}|j                  dd       xs |}t        j                  j	                  |d      }| j                  d|i||      }d|v }|r|j                  ddd      }| j                  |      }|'t        d| d	t        t        t                           t        j                  |      }|j                         D ci c]$  \  }}|j                         | j                   vr||& }}}|j                  d
d        d }d }|dk(  rt#               j%                  |||      }n|dk(  r|dv rg }|D ]  }|dk(  rt'               j%                  ||      }n_|dk(  rt)               j%                  ||      }n>|dk(  rt+               j%                  ||      }nt        dj-                  |g d            |j/                  |        nL|dk(  rGg }|D ]@  }t1               j%                  |||||j3                  d            }|j/                  |       B | j5                  ||j                  dd       |      \  }}|r| d}n| d| d}|s|
r1| j7                  |t9        |t:              r|nd |	||||||||||      S | j=                  |t9        |t>              r|nd |	||||||||||      }|t        d      |S |t        d      ddi} |ddi|} | jA                  ||||tC        jD                  |      | |       }!tG        ||||||||!jH                  d |
|	||!jJ                  !      S c c}}w )"Nmodel_idrj   )safer'   )r    rd   r   zasync_invoke/r   z:Unable to determine bedrock embedding provider for model: z. Supported providers: usercohere)rd   r   inference_paramsamazon)ru   rv   rw   ru   )r   r   rv   rw   z(Unmapped model. Received={}. Expected={}ri   output_s3_uri)r   r   async_invoke_router   r   aws_bedrock_runtime_endpointrA   r   r'   z/async-invokez/model/z/invoke)r?   r@   r   r8   r   r   r'   rd   r   r   re   rf   z)Unable to map Bedrock request to providerr   r   r   )rd   r   r   r   r    encodingrC   complete_api_baser   r   r@   r?   rB   )&r:   r1   urllibparsequote_get_aws_region_namereplaceget_bedrock_embedding_providerr   listr	   r
   copydeepcopyitemsloweraws_authentication_paramsr   _transform_requestr   r   r   r   r   r   rz   get_runtime_endpointr   r2   r   r   r   r   rQ   rR   cohere_embeddingrF   rB   )"r5   rd   r   rA   r   r   r   r   r?   r@   r   r   r    r   r   r8   r'   unencoded_model_idmodelIdhas_async_invokere   r   kvrC   r   itransformed_requesttwelvelabs_requestr   proxy_endpoint_urlr   rB   r   s"                                     r9   
embeddingszBedrockEmbedding.embeddingsq  s   " (,'='=o'N$_ 
D1:U 	 ,,$$%7b$A33.@' 4 
 +e3MM/2q9E66u=LUG T((,X6Y-Z(['\^   ==9 )..0
01wwy > >> qD0 	 

 	D	
 26%)
x/1DD5;K E D !e 0
 '

 J99 ?@SS2B T  (
 ::*=*?*R*R2B +S +' <<*=*?*R*R2B +S +' $BII!	 	 !!"565 6 %J46II)9+;!(&6&:&:?&K J  # !!"45  ,0+D+D)8)<)<.* , ,E ,
(( *^=9L*^77)7CL!99 "-*VEU2V !#) +"/!-$3 +#%$4! :  $ !% < < )j.M %'+) /'! 0! != !$ !( KLL$$\GHH!#56$%'9K]KG**#+'%D! + 
  )#+%kk!OO
 	
M
s   )Mr   c                 p  K   | j                  |      \  }}| j                  d|j                  d      |      \  }}| d| }ddi}	| j                  ||d|d|	d      }
||j	                  |
j
                        }d	j                  |j                         D cg c]  \  }}d
| d| d c}}      }d}|dz  }||
j                   dz  }|| dz  }|j                  |dd|i|
j                  |
j
                  |d       t        t        j                        }|j                  |
j                  |
j
                         d{   }||j                  |d|dd|ii       |j                  dk(  r|j                         S t!        d|j                   d|j"                         c c}}w 7 iw)aj  
        Get the status of an async invoke job using the GetAsyncInvoke operation.

        Args:
            invocation_arn: The invocation ARN from the async invoke response
            aws_region_name: AWS region name
            **kwargs: Additional parameters (credentials, etc.)

        Returns:
            dict: Status response from AWS Bedrock
        Nr   r   z/async-invoke/r   r   rj   r    z-H 'z: 'z!

GET Request Sent from LiteLLM:
zcurl -X GET \
z \

r   )r   rA   rB   request_strr   )r_   )rF   rB   r   r      z#Failed to get async invoke status: z - )r:   r   rz   r   _get_masked_headersrB   joinr   rF   r   r   r   ra   r   rH   rQ   r   rV   )r5   r   r'   r   kwargsr8   _r   
status_urlrB   r   masked_headersr   r   formatted_headerscustom_curlr?   rU   s                     r9   _get_async_invoke_statusz)BedrockEmbedding._get_async_invoke_status/  s      //7Q 33)/4R)S+ 4 
a %~^N3CD
 "#56 **#+# + 
 "(<<W__MN #.<.B.B.DE.Dda4s"QCq!.DE! AK--Kgkk]%00K/033K  $,<n+M '&#.	! ! 	 (\5I5IJOO $ 
 
 "!!$"*),<n+M!	 "  3&==?"5h6J6J5K3x}}o^ Q F(
s    BF6F.
.BF6
F4A*F6)F)NFr<   )__name__
__module____qualname__dictr   r   r3   r:   r>   r   r   r   rL   rN   rO   r\   r   rb   r   r
   boolr   r~   r   r   r   r   r   r=   r   r9   r   r   '   s   2,2, 
sCx2,h% %u}} 456 	
   
8)* %u}} 456 	
   
H +0Q!DzQ! Q! 6	Q!
 "$Q! 
#	$Q!~ "&*/@
%@
 %u}} 456@
 J	@

 @
  ~@
 @
 @
 @
 @
 6@
 #@
 "$@
\ "&*/@
)*@
 %u}} 456@
 J	@

 @
  ~@
 @
 @
 @
 @
 6@
 #@
 "$@
b "&|
|
 Cy|
 3-	|

 *|
  |
 {,<<=>|
 %u}} 456|
 TN|
  ~|
 |
 |
 #|
  
!|
~ FJY!Y47Y	Yr   r   )0__doc__r   rQ   urllib.parser   typingr   r   r   r   r   r   r	   rN   r`   litellm.constantsr
   !litellm.llms.cohere.embed.handlerr   r   &litellm.llms.custom_httpx.http_handlerr   r   r   r   litellm.secret_managers.mainr   litellm.types.llms.bedrockr   r   r{   r   r   base_aws_llmr   common_utilsr   amazon_titan_g1_transformationr   &amazon_titan_multimodal_transformationr   amazon_titan_v2_transformationr   cohere_transformationr   !twelvelabs_marengo_transformationr   r   r=   r   r9   <module>r      sl       H H H   A K  4 @ % ' ? @ ? Oa	z a	r   