
    ih                     &   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. ddl/m0Z0  G d de"      Z1y)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   )AmazonNovaEmbeddingConfig)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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   )Credentials7Missing 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                  u/Users/manta/Documents/Projects/TheRoad-I1/.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 )r7   s    r;   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)NrB   urlrD   rE   status_codemessage  Timeout error occurred.)r4   r   floatinthttpxTimeoutr   postjsondumpsraise_for_statusHTTPStatusErrorresponserJ   r   textTimeoutException
r7   rA   rB   rC   rD   rE   _paramsrW   err
error_codes
             r;   _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)NrB   )paramsllm_providerrG   rI   rL   rM   )r4   r   rN   rO   rP   rQ   r   litellmr   BEDROCKrR   rS   rT   rU   rV   rW   rJ   r   rX   rY   rZ   s
             r;   _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>Nresponse_listmodelprovideris_async_invoke
batch_datac                 
   d}|rt        |      dk(  rd|d   v r|dk(  r t               j                  |d   |      }n(|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                  |||      }n|dk(  rt               j                  ||      }nc|dk(  rt               j                  ||      }nB|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)rW   rf   nova )	EmbeddingUsager   )r   indexobject)prompt_tokenstotal_tokens)HiddenParams_invocation_arn)rE   rf   usagehidden_paramsamazon.titan-embed-image-v1)re   rf   ri   amazon.titan-embed-text-v1)re   rf   amazon.titan-embed-text-v2:0z?Unable to map model response to known provider format. model={})lenr    _transform_async_invoke_responser   getlitellm.types.utilsro   rp   litellm.types.llms.baseru   setattrr   r   _transform_responser   r   	Exceptionformat)r7   re   rf   rg   rh   ri   returned_responseinvocation_arnro   rp   r   rw   ru   rx   s                 r;   r   z$BedrockEmbedding._transform_response   s    :> M"a'=#33<'46WW!.q!1 X  "
 V#-/PP!.q!1 Q  " "/q!1!5!5or!J@% &	
 AA> A ,'8.I$5#"/	%! 55:<PP&35Z Q  "
 66$7$9$M$M"/u %N %! 88$7$9$M$M"/u %N %! \)46JJ&35 K  "
 V#$=$?$S$S"/u %T %! $QXX 
 !     r:   extra_headersendpoint_urlr)   logging_objapi_keyc           
         g }|D ]  }ddi}|ddi|}| j                  ||||t        j                  |      ||      }|	j                  |d||j                  |j
                  d       t        |d      rt        |j
                        ni }| j                  |||j                  ||      }|	j                  |d|d	|i
       |j                  |        | j                  |||
||      S NContent-Typeapplication/jsonr:   r)   r   r   rE   rD   r   rn   )complete_input_dictrC   rD   inputr   additional_argsrD   )rA   rB   rC   rD   rE   r   r   r   original_responser   )re   rf   rg   rh   ri   )get_request_headersrS   rT   pre_callrH   rD   hasattrdictr^   	post_callappendr   r7   rA   rB   ri   r:   r   r   r)   rf   r   rg   r   rh   	responsesrE   rD   preppedheaders_for_requestrW   s                      r;   _single_func_embeddingsz(BedrockEmbedding._single_func_embeddings   sA    !#	D%'9:G()+=OO..' /+)ZZ% / G   +/ '&! !  *1))DW__%"   ++ + , H !!"*!6 =	 "  X&Y \ ''#+! ( 
 	
r   c           
        K   g }|D ]  }ddi}|ddi|}| j                  ||||t        j                  |      ||      }|	j                  |d||j                  |j
                  d       t        |d      rt        |j
                        ni }| j                  |||j                  ||       d {   }|	j                  |d|d	|i
       |j                  |        | j                  |||
||      S 7 Dwr   )r   rS   rT   r   rH   rD   r   r   rd   r   r   r   r   s                      r;   _async_single_func_embeddingsz.BedrockEmbedding._async_single_func_embeddings?  sO     !#	D%'9:G()+=OO..' /+)ZZ% / G   +/ '&! !  *1))DW__%"   "22 + 3  H !!"*!6 =	 "  X&] ` ''#+! ( 
 	
%s   B1C:3C84AC:r   model_responseprint_verbose
aembeddinglitellm_paramsc                 t   | 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/                  |        n|dk(  rHg }|D ]@  }t1               j%                  |||||j3                  d            }|j/                  |       B nL|dk(  rGg }|D ]@  }t5               j%                  |||||j3                  d            }|j/                  |       B | j7                  ||j                  dd       |      \  }}|r| d}n| d| d}|s|
r1| j9                  |t;        |t<              r|nd |	||||||||||      S | j?                  |t;        |t@              r|nd |	||||||||||      } | t        d      | S |t        d      dd i}!|dd i|}!| jC                  ||||tE        jF                  |      |!|!      }"tI        |"d"      rtK        |"jL                        ni }#tO        ||||||||"jP                  d |
|	||##      S c c}}w )$Nmodel_idrn   safer)   )r!   rf   r   zasync_invoke/r   z:Unable to determine bedrock embedding provider for model: z. Supported providers: usercohere)rf   r   inference_paramsamazon)ry   rz   r{   ry   )r   r   rz   r{   z(Unmapped model. Received={}. Expected={}rl   output_s3_uri)r   r   async_invoke_router   r   rm   aws_bedrock_runtime_endpointrC   r   r)   z/async-invokez/model/z/invoke)rA   rB   ri   r:   r   r   r)   rf   r   r   rg   rh   z)Unable to map Bedrock request to providerr   r   r   rD   )rf   r   r   r   r!   encodingrE   complete_api_baser   r   rB   rA   rD   ))r<   r3   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   r~   r   get_runtime_endpointr   r4   r   r   r   r   rS   rT   r   r   rD   cohere_embeddingrH   )$r7   rf   r   rC   r   r   r   r   rA   rB   r   r   r!   r   r   r:   r)   unencoded_model_idmodelIdhas_async_invokerg   r   kvrE   ri   itransformed_requesttwelvelabs_requestnova_requestr   proxy_endpoint_urlr   rD   r   r   s$                                       r;   
embeddingszBedrockEmbedding.embeddings  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  J8:MM%5'7$"2"6"6"G  N   !!,/  ,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! + 
 &-Wi%@D!b 	  )#+%kk!'
 	
k
s   )N4r   c                 6  K   | j                  |      \  }}| j                  d|j                  d      |      \  }}ddlm}  ||d      }	|j                  d       d	|	 }
d
di}	 ddlm} ddlm	}  |d|
d|      } ||d|      }|j                  |       |j                         }||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|j1                         S t3        d"|j.                   d#|j4                         # t        $ r t        d      w xY wc c}}w 7 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   r   )r   rn   r   /z/async-invoke/r   r   )	SigV4Auth)
AWSRequestr%   GET)methodrH   rE   rD   bedrock z-H 'z: 'z!

GET Request Sent from LiteLLM:
zcurl -X GET \
z \

r   )r   rC   rD   request_strr   )ra   )rH   rD   r   r      z#Failed to get async invoke status: z - )r<   r   r~   urllib.parser   rstripbotocore.authr   botocore.awsrequestr   r2   add_authprepare_get_masked_headersrD   joinr   rH   r   r   r   rc   r   rJ   rS   r   rX   )r7   r   r)   r   kwargsr:   _r   r   encoded_arn
status_urlrD   r   r   requestsigv4r   masked_headersr   r   formatted_headerscustom_curlrA   rW   s                           r;   _get_async_invoke_statusz)BedrockEmbedding._get_async_invoke_statusT  s{      //7Q 33)/4R)S+ 4 
a 	' N4$++C01}M
 "#56	Y/6
 	
 +y/Bw //# "(<<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^   	YWXX	Y. F(
s9   A%H(G9 4A2H&H
9BHHA#H9H
H)FN)NFr>   )__name__
__module____qualname__r   r   r   r5   r<   r@   r   r   r   rN   rP   rQ   r^   r   rd   r   r
   boolr   r   r   r   r   r   r   r?   r   r;   r    r    (   s   2,2, 
sCx2,h% %u}} 456 	
   
8)* %u}} 456 	
   
H +0+/\!Dz\! \! 6	\!
 "$\! T$Z(\! 
#	$\!T "&*/D
%D
 %u}} 456D
 J	D

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

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

 *K
  K
 {,<<=>K
 %u}} 456K
 TNK
  ~K
 K
 K
 #K
  
!K
\ FJg!g47g	gr   r    )2__doc__r   rS   r   r   typingr   r   r   r   r   r   r	   rP   rb   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_nova_transformationr   amazon_titan_g1_transformationr   &amazon_titan_multimodal_transformationr   amazon_titan_v2_transformationr   cohere_transformationr   !twelvelabs_marengo_transformationr   r    r?   r   r;   <module>r     so       H H H   A K  4 @ % ' A ? @ ? OS
z S
r   