
    ^hfc                         S SK r S SKJr  S SKJrJrJrJrJr  S SK	r	S SK
r
S SKJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJrJrJr  S
SKJrJr  SSKJ r   \ " 5       r!  " S S\5      r"g)    N)deepcopy)AnyCallableListOptionalUnion)verbose_logger)asyncify)
BaseAWSLLM)_get_httpx_clientget_async_httpx_client)AllMessageValues)CustomStreamWrapperEmbeddingResponseModelResponseUsage
get_secret   )AWSEventStreamDecoderSagemakerError   )SagemakerConfigc                      \ rS rSrS\4S jr SS\S\S\\   S\S\S	\	\   4S
 jjr
S0 SSS0 4S\S\S\S\S\S\S\	\\\R"                  4      S\S\4S jjr SS\S\S\4S jjrS\\   S\S\S\	\   S\S\S\	\   S\S\S\4S jrS\\   S\S\S\	\   S\S\S\S\S\	\   S\S\4S jr0 SS4S\S\S\S\S\4
S jjrSrg)SagemakerLLM%   optional_paramsc                     SSK Jn  UR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUR                  S	S 5      nUR                  S
S 5      n	UR                  SS 5        UR                  SS 5      n
UR                  SS 5      nUcQ  [	        SS 5      nUb  [        U[        5      (       a  Un[	        SS 5      nUb  [        U[        5      (       a  UnUc  SnU R                  UUUUUU	UU
US9	nX4$ ! [         a    [        S5      ef = f)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_bedrock_runtime_endpointaws_web_identity_tokenaws_sts_endpointAWS_REGION_NAME
AWS_REGION	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                  c/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/sagemaker/completion/handler.py_load_credentialsSagemakerLLM._load_credentials'   s   	Y8
 !0 3 34KT R+//0CTJ+//0CTJ)--.?F'++OTB*../A4H*../A4H*D	
 "1!4!45Mt!T*../A4H "&01BD&I#&2z'8 8 #:'1,'E$'3
(#9 9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 ++_  	YWXX	Ys   D* *E Nmodeldatamessagesr#   extra_headersc                     SSK Jn  SSKJn	  U" USU5      n
UR                  S5      SL a
  SU S	U S
3nO	SU S	U S3nUR                  SS 5      nUb  Un[        R                  " U5      R                  S5      n[        R                  UUUUS9nU	" SXUS9nU
R                  U5        Ub  SU;   a  US   UR                  S'   UR                  5       nU$ ! [         a    [	        S5      ef = f)Nr   )	SigV4Auth)
AWSRequestr   	sagemakerstreamTzhttps://runtime.sagemaker.z.amazonaws.com/endpoints/z/invocations-response-streamz/invocationssagemaker_base_urlutf-8)headersr:   r<   r   POST)methodurlr;   rE   Authorization)botocore.authr?   botocore.awsrequestr@   r.   getjsondumpsencodesagemaker_configvalidate_environmentadd_authrE   prepare)r3   r6   r:   r;   r<   r   r#   r=   r?   r@   sigv4api_baserC   encoded_datarE   requestprepped_requests                    r7   _prepare_requestSagemakerLLM._prepare_request^   s5   	Y/6 +{ODx(D03O3DD]^c]d  eA  BH3O3DD]^c]ddpqH,001EtL))Hzz$'..w7"77!+	 8 
 xG
 	w%/]*J/<_/MGOOO,!//+?  	YWXX	Ys   C C-Fmodel_responseprint_verboselitellm_paramstimeoutacompletionrE   c                 H   U R                  U5      u  nn[        U5      nUR                  SS 5      nUR                  SS 5      n[        R
                  R                  5       nUR                  5        H  u  nnUU;  d  M  UUU'   M     USL Ga!  USL a  U R                  UUU
UUUUUUUUUUS9nU$ [        R                  UUUUUS9nU R                  UUUUUUS9nUb  UR                  R                  SU05        [        5       nUR                  UR                   UR                  UUS9nUR"                  S	:w  a+  [%        UR"                  ['        UR)                  5       5      S
9e[+        SS9nUR-                  UR-                  SS95      n[/        UUSUS9nUR1                  USUSU0S9  U$ USL a  U R3                  UUU
UUUUUUUUUUS9$ [        R                  UUUUUS9nUUUUUUS.n U R                  " S#0 U D6n Ub  UR                  R                  SU05        Sn	[        5       nUR5                  / SUUR                   UR                  S.S9   UR                  UR                   UR                  UU	S9nUR"                  S	:w  a  [%        UR"                  UR6                  S
9e [        RA                  UUUUUUUUUS"9	$ ! [8         a$  n!UR1                  / S['        U!5      SU0S9  U!eS n!A!ff = f! [8         a  n![:        R<                  " S['        U!5      5        [?        U!S0 5      R                  S0 5      R                  SS5      n"[?        U!S0 5      R                  S0 5      R                  S['        U!5      5      n#S U#;   a  U#S!-  n#[%        U"U#S
9eS n!A!ff = f)$NrB   model_idT)r<   r:   custom_prompt_dicthf_model_namer   encodingr[   logging_objra   r#   r6   rE   r]   r:   r<   r   r]   rE   )r:   r;   r<   r   r6   r#   z$X-Amzn-SageMaker-Inference-Component)rH   rE   rM   rB      status_codemessage r:      
chunk_sizerA   completion_streamr:   custom_llm_providerre   complete_input_dictinputapi_keyoriginal_responseadditional_args)r<   r:   rb   rc   r[   rd   re   ra   r   r6   r#   rE   r]   r:   r;   r   r6   r#   r<        r@rs   rU   rE   ru   rv   rx   rH   rE   rM   r^   zSagemaker error %sresponseResponseMetadataHTTPStatusCode  ErrorMessage+Inference Component Name header is requiredJ
 pass in via `litellm.completion(..., model_id={InferenceComponentName})`	r:   raw_responser[   re   request_datar<   r   rd   r]    )!r8   r   r/   rL   litellmr   
get_configitemsasync_streamingrP   transform_requestrY   rE   updater   postrH   ri   r   r1   readr   
iter_bytesr   	post_callasync_completionpre_calltext	Exceptionr	   errorgetattrtransform_response)$r3   r:   r<   r[   r\   rd   re   r   r]   r^   rb   rc   	logger_fnr_   rE   r6   r#   inference_paramsrB   ra   configkvr~   r;   prepared_requestsync_handlersync_responsedecoderrq   streaming_response_dataprepared_request_argseri   error_messages$                                       r7   
completionSagemakerLLM.completion   s   & (,'='=o'N$_#O4!%%h5"&&z48 ((335LLNDAq))&' #	 # T>d"//%'9"/$3%#1 +%$3 +##1 0   '99%$3#1# :  $(#8#8%$3 +$3 $9 $  ' %,,33?J  12 , 1 1(,,,44!	 !2 ! !,,3($1$=$= #M$6$6$8 9 
 0b9$+$6$6!,,,=%! &9&7(3 +	&" !!"4!6 =	 "  &%
 $((!#5+-!'! /' /- )  " !22+) 3 
 .&. !
  00I3HI9	Q# !((//;XF
 G,.L  +0 0 4 4/77! !  , 1 1(,,,44#	 !2 ! !,,3($1$=$= - 2 2  48  22&)#+) 3 

 
	
/  %%&)!f%:E$B	 &    	Q  !5s1v>:r*',%s+  :r*..w;??	3q6R  =M!nn [-PP	Qs9   AK: AK	 	
K7K22K77K: :
N!BNN!rU   c                 R  #     Uc!  [        [        R                  R                  S9nUR	                  UUUSS9I S h  vN nUR
                  S:w  a  [        UR
                  UR                  S9e[        SS9nUR                  UR                  SS	95      nU$  N[! [        R                   a8  n	U	R                  R
                  n
[        XR                  R                  S9eS n	A	f[        R                   a    [        S
SS9e[         a  n[        S[!        U5      S9eS nAff = f7f)Nllm_providerT)rE   rM   rB   rg   rh   rk   rl   rm   rn   i  zTimeout error occurred.r   )r   r   LlmProviders	SAGEMAKERr   ri   r   r   r   aiter_bytesr   httpxHTTPStatusErrorr~   TimeoutExceptionr   r1   )r3   rU   rE   r;   re   clientr~   r   rq   err
error_coder   s               r7   make_async_callSagemakerLLM.make_async_callc  s+    &	B~/!(!5!5!?!? $[[	 )  H ##s*$ ( 4 4hmm  ,"5G ' 3 3$$$5! %$#6 $$ 	T11J ZARARSS%% 	U S:STT 	B S#a&AA	BsE   D'9B BAB D'B D$/3C""*D$DD$$D'rb   rc   ra   re   c                 \  #    [         R                  UU0 UESS0EUUS9I S h  vN n[        U R                  5      nUUUUUUS.nU" S0 UD6I S h  vN nU R	                  UR
                  UR                  UUS9I S h  vN n[        UUSUS9nUR                  / SS	S
U0S9  U$  N NV N*7f)NrB   Trf   ry   )rU   rE   r;   re   rA   rp   rk   zfirst stream response receivedrs   rt   r   )	rP   async_transform_requestr
   rY   r   rH   rE   r   r   )r3   r<   r:   rb   rc   r6   r#   r   rd   r[   ra   re   r]   rE   r;   asyncified_prepare_requestr   r   rq   r   s                       r7   r   SagemakerLLM.async_streaming  s      &==??$?) > 
 
 &.d.C.C%D".&. !
 "<!T>S!TT"&"6"6%))$,,#	 #7 #
 
 1/ +#	
 	>2D9	 	 	
 "!M
  U
s3   !B,B&-B,B(-B,?B* 'B,(B,*B,c                 J  #    Sn[        [        R                  R                  S9n[        R                  UUU	UUS9I S h  vN n[        U R                  5      nUUU	UUUS.nU" S0 UD6I S h  vN nU
R                  / SUUR                  UR                  S.S9   Ub  UR                  R                  SU05         UR                  UR                  UR                  UUS	9I S h  vN nUR                  S
:w  a  [        UR                  UR                  S9e [        R'                  UUUU
UUU	UUS9	$  N N NR! [          a'  nU
R#                  US   S[%        U5      SU0S9  UeS nAff = f! [          a&  n[%        U5       nSU;   a  US-  n[        SUS9eS nAff = f7f)Nrz   r   rf   ry   rk   r{   r|   z#X-Amzn-SageMaker-Inference-Componenr}   rg   rh   inputsrs   rt   r   r   r   r   r   )r   r   r   r   rP   r   r
   rY   r   rH   rE   r   r   ri   r   r   r   r   r1   r   )r3   r<   r:   rb   rc   r6   r#   rd   r[   r   re   ra   rE   r]   r^   async_handlerr;   r   r   r   r~   r   r   s                          r7   r   SagemakerLLM.async_completion  s      . --77
 &==+) > 
 
 &.d.C.C%D".&. !
 "<!T>S!TT'+,00+33 	 	
!	I# !((//:HE!.!3!3(,,,44#	 "4 "  ''3.($,$8$8(--  /$  22!)#+) 3 

 
	

$ U(  %%x.&)!f%:D$A	 &    	I"1vhM<M!nn S-HH		Isw   >F# D6-F#.D8/-F# E0 >)D< 'D:(2D< F#8F#:D< <
E-"E((E--E0 0
F :!FF  F#ru   c           
         SSK nUR                  SS5      nUR                  SS5      nUR                  SS5      nUb  UR                  SUUUS9nO-[        S5      =(       d    U=(       d    S	nUR                  SUS
9n[	        U5      nUR                  SS5        [
        R                  R                  5       nUR                  5        H  u  nnUU;  d  M  UUU'   M     [        R                  " SU05      R                  S5      nSU SU S3nUR                  USUUS.S9   UR                  USUSS9n[        R&                  " US   R)                  5       R+                  S5      5      nUR-                  USUS U0S!9  U" S"U 35        S#U;  a
  [%        SS$S9eUS#   n[/        U[0        5      (       d  [%        S%S&U 3S9e/ n[3        U5       H  u  nnUR5                  S#UUS'.5        M     S(Ul        UUl        Xl        SnU H   n U[=        UR                  U 5      5      -  nM"     [?        US)[A        USUS*95        U$ ! [         ar  n[        US0 5      R!                  S0 5      R!                  SS5      n[        US0 5      R!                  S0 5      R!                  S[#        U5      5      n[%        UUS9eSnAff = f)+z7
Supports Huggingface Jumpstart embeddings like GPT-6B
r   Nr    r!   r#   zsagemaker-runtime)service_namer!   r    region_namer*   r,   )r   r   rB   text_inputsrD   zE
        response = client.invoke_endpoint(
            EndpointName=z?,
            ContentType="application/json",
            Body=zK, # type: ignore
            CustomAttributes="accept_eula=true",
        )rk   )rs   request_strr|   zapplication/jsonzaccept_eula=true)EndpointNameContentTypeBodyCustomAttributesr~   r   r   r   r   r   rh   r   utf8rs   rt   zraw model_response: 	embeddingzembedding not found in responsei  z"Response not in expected format - )objectindexr   listusage)prompt_tokenscompletion_tokenstotal_tokens)!boto3r/   r   r   r   r   r   r   r   rM   rN   rO   r   invoke_endpointr   r   rL   r1   r   loadsr   decoder   r0   r   	enumerateappendr   r;   r:   lensetattrr   )!r3   r:   ru   r[   r\   rd   re   r   rb   r]   r   r   r    r!   r#   r   r   r   r   r   r   r;   r   r~   r   ri   r   
embeddingsoutput_dataidxr   input_tokensr   s!                                    r7   r   SagemakerLLM.embedding+  sR   " 	 !0 3 34KT R+//0CTJ)--.?F( \\0"3&;+	 " F ,- " 
 \\0' " F $O4Xt, ((335LLNDAq))&' #	 # zz=%0188A ! 
	 	48U 	 	
	Q--".!3	 . H" ::hv.335<<VDE&2D9	 	 	
 	,XJ78h& )J  k*
*d++ <ZLI 
 '
3NC&9M 4
 !')$DC 566L  	*"#)	
 s  		Q:r*',%s+  :r*..w;??	3q6R  ![-PP		Qs   %I 
J?A-J::J?r   )N)__name__
__module____qualname____firstlineno__dictr8   r1   r   r   r   rY   r   r   r   r   floatr   Timeoutboolr   r   r   r   r   r   r   __static_attributes__r       r7   r   r   %   si   5,5,~ )-, , 	,
 '(, , ,  ~,p :>!U
U
 U
 &	U

  U
 U
 U
 %u}} 456U
 U
 U
z .B.B .B 	.B`6"'(6" 6" !	6"
  }6" 6" &6" 3-6" 6" 6" 6"p^
'(^
 ^
 !	^

  }^
 ^
 &^
 ^
 ^
 3-^
 ^
 ^
R NN N *	N
  N N Nr   r   )#rM   copyr   typingr   r   r   r   r   r   r   litellm._loggingr	   #litellm.litellm_core_utils.asyncifyr
   !litellm.llms.bedrock.base_aws_llmr   &litellm.llms.custom_httpx.http_handlerr   r   litellm.types.llms.openair   litellm.utilsr   r   r   r   r   common_utilsr   r   transformationr   rP   r   r   r   r7   <module>r      sY      7 7   + 8 8 7  A +"$ T
: T
r   