
    ib                         d dl Z d dlmZ d dl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 d dlmZmZ d dlmZ d d	lmZmZmZmZ d
dlmZmZ ddlm Z  d
dl!m"Z"  e        Z#	  G d de      Z$y)    N)deepcopy)AnyCallableListOptionalUnioncast)verbose_logger)asyncify)
BaseAWSLLM)_get_httpx_clientget_async_httpx_client)AllMessageValues)CustomStreamWrapperEmbeddingResponseModelResponse
get_secret   )AWSEventStreamDecoderSagemakerError   )SagemakerConfig)SagemakerEmbeddingConfigc                   n   e Zd ZdefdZ	 ddededee   dededed	ee   fd
Z	di dddi fdede
dededededeeeej                   f      dedefdZ	 ddededefdZdee   dededee   dededee   dededefdZdee   dededee   dededededee   dedefdZi ddfdede
dededef
dZy)SagemakerLLMoptional_paramsc                 p   	 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       }
|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_bedrock_runtime_endpoint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                  z/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/sagemaker/completion/handler.py_load_credentialsz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 #:'1,'E$'3
(#9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 O++_  	YWXX	Ys   D   D5Nmodeldatamessageslitellm_paramsr#   extra_headersc	                    	 ddl m}	 ddlm}
  |	|d|      }|j                  d      du r
d| d	| d
}n	d| d	| d}|j                  dd       }||}t        j                  |      j                  d      }t        j                  |||||      } |
d|||      }|j                  |       |d|v r|d   |j                  d<   |j                         }|S # t        $ r t	        d      w xY w)Nr   )	SigV4Auth)
AWSRequestr   	sagemakerstreamTzhttps://runtime.sagemaker.z.amazonaws.com/endpoints/z/invocations-response-streamz/invocationssagemaker_base_urlutf-8)headersr8   r:   r   r;   POST)methodurlr9   rD   Authorization)botocore.authr>   botocore.awsrequestr?   r-   getjsondumpsencodesagemaker_configvalidate_environmentadd_authrD   prepare)r2   r5   r8   r9   r:   r;   r   r#   r<   r>   r?   sigv4api_baserB   encoded_datarD   requestprepped_requests                     r6   _prepare_requestzSagemakerLLM._prepare_request]   s;   	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 
 xlG
 	w%/]*J/<_/MGOOO,!//+A  	YWXX	Ys   C C.Fmodel_responseprint_verbosetimeoutacompletionrD   c                    | j                  |      \  }}t        |      }|j                  dd       }|j                  dd       }t        j
                  j                         }|j                         D ]  \  }}||vs|||<    |du rD|du r | j                  |||
||||||||||      }|S t        j                  |||||      }| j                  |||||||      }||j                  j                  d|i       t               }|j                  |j                   |j                  |j"                  |      }|j$                  d	k7  r.t'        |j$                  t)        |j+                               
      t-        d      }|j/                  |j/                  d            }t1        ||d|      }|j3                  |d|d|i       |S |du r| j5                  |||
||||||||||      S t        j                  |||||      }|||||||d}  | j                  d#i | }	 ||j                  j                  d|i       d}	t               }|j7                  g d||j                   |j                  d       	 |j                  |j                   |j                  |j"                  |	      }|j$                  d	k7  r!t'        |j$                  |j8                  
      	 t        jC                  |||||||||"	      S # t:        $ r'}!|j3                  g dt)        |!      d|i       |!d }!~!ww xY w# t:        $ r}!t=        j>                  dt)        |!             tA        |!di       j                  di       j                  dd      }"tA        |!di       j                  di       j                  dt)        |!            }#d |#v r|#d!z  }#t'        |"|#
      d }!~!ww xY w)$NrA   model_idT)r:   r8   custom_prompt_dicthf_model_namer   encodingrY   logging_objr^   r#   r5   rD   r;   r8   r:   r   r;   rD   )r8   r9   r:   r   r;   r5   r#   $X-Amzn-SageMaker-Inference-Component)rG   rD   r9   rA      status_codemessage r8      
chunk_sizer@   completion_streamr8   custom_llm_providerrb   complete_input_dictinputapi_keyoriginal_responseadditional_args)r:   r8   r_   r`   rY   ra   rb   r^   r   r5   r#   rD   r;   r8   r9   r   r;   r5   r#   r:        r@rq   rT   rD   rs   rt   rv   rG   rD   r9   r[   zSagemaker error %sresponseResponseMetadataHTTPStatusCode  ErrorMessage+Inference Component Name header is requiredJ
 pass in via `litellm.completion(..., model_id={InferenceComponentName})`	r8   raw_responserY   rb   request_datar:   r   ra   r;    )"r7   r   r.   rK   litellmr   
get_configitemsasync_streamingrO   transform_requestrX   rD   updater   postrG   bodyrg   r   r0   readr   
iter_bytesr   	post_callasync_completionpre_calltext	Exceptionr
   errorgetattrtransform_response)$r2   r8   r:   rY   rZ   ra   rb   r   r;   r[   r_   r`   	logger_fnr\   rD   r5   r#   inference_paramsrA   r^   configkvr|   r9   prepared_requestsync_handlersync_responsedecoderro   streaming_response_dataprepared_request_argserg   error_messages$                                       r6   
completionz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#1 +$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 
 .,&. !
 14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L3 >A#L   	L0	"L++L00L3 3	O<BOOrT   c                 z  K   	 |$t        t        j                  j                        }|j	                  |||d       d {   }|j
                  dk7  r!t        |j
                  |j                        t        d      }|j                  |j                  d	            }|S 7 c# t        j                  $ r<}	|	j                  j
                  }
t        |
|	j                  j                        d }	~	wt        j                  $ r t        d
d      t        $ r}t        dt!        |            d }~ww xY ww)Nllm_providerT)rD   r9   rA   re   rf   ri   rj   rk   rl   i  zTimeout error occurred.r   )r   r   LlmProviders	SAGEMAKERr   rg   r   r   r   aiter_bytesr   httpxHTTPStatusErrorr|   TimeoutExceptionr   r0   )r2   rT   rD   r9   rb   clientr|   r   ro   err
error_coder   s               r6   make_async_callzSagemakerLLM.make_async_calle  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sG   D;>B( B&A"B( %D;&B( (D8;7C22+D8D33D88D;r_   r`   r^   rb   c                   K   t         j                  ||i |ddi||       d {   }t        | j                        }|||||||d} |di | d {   }|
|j                  j                  d|
i       |j                  st        d      | j                  |j                  |j                  t        t        |j                        |       d {   }t        ||d|	      }|j                  g d
dd|i       |S 7 7 7 0w)NrA   Trc   rw   rd   zPrepared request body is empty)rT   rD   r9   rb   r@   rn   ri   zfirst stream response receivedrq   rr   r   )rO   async_transform_requestr   rX   rD   r   r   
ValueErrorr   rG   r	   r0   r   r   )r2   r:   r8   r_   r`   r5   r#   r   ra   rY   r^   rb   r;   rD   r9   asyncified_prepare_requestr   r   ro   r   s                       r6   r   zSagemakerLLM.async_streaming  sU      &==??$?) > 
 
 &.d.C.C%D".,&. !
 "<!T>S!TT$$++7B  $$=>>"&"6"6%))$,,c+001#	 #7 #
 
 1/ +#	
 	>2D9	 	 	
 "!_
" U
s4   $DD.DDA>DD-DDDc                   K   d}t        t        j                  j                        }t        j                  |||	||       d {   }t        | j                        }|||	||||d} |di | d {   }|
j                  g d||j                  |j                  d       	 ||j                  j                  d|i       	 |j                  |j                  |j                  |j                  |	       d {   }|j                  d
k7  r!t        |j                  |j                         	 t        j)                  ||||
|||	||	      S 7 7 7 X# t"        $ r*}|
j%                  |d   dt'        |      d|i       |d }~ww xY w# t"        $ r'}t'        |       }d|v r|dz  }t        d|      d }~ww xY ww)Nrx   r   rc   rw   ri   ry   rz   rd   r{   re   rf   inputsrq   rr   r   r   r   r   r   )r   r   r   r   rO   r   r   rX   r   rG   rD   r   r   r   rg   r   r   r   r   r0   r   )r2   r:   r8   r_   r`   r5   r#   ra   rY   r   rb   r^   rD   r;   r[   async_handlerr9   r   r   r   r|   r   r   s                          r6   r   zSagemakerLLM.async_completion  s*      . --77
 &==+) > 
 
 &.d.C.C%D".,&. !
 "<!T>S!TT'+,00+33 	 	
!	I# !((//;XF!.!3!3(,,,44)..#	 "4 "  ''3.($,$8$8(--  /$  22!)#+) 3 

 
	
A
& U(  %%x.&)!f%:D$A	 &    	I"1vhM<M!nn S-HH		Isx   AGE.G5E60G'F 6E =E>4E 2 GGE 	F!%FFF 	F>"F99F>>Grs   c                    ddl }| j                  |      \  }}|j                  |j                  |j                  |j
                  |      }|j                  d      }t        |      }|j                  dd       t        j                  j                         }|j                         D ]  \  }}||vs|||<    t        j                  |      }|j                  |||i       }t!        j"                  |      j%                  d      }d| d	|d
}|j'                  |d||d       	 |j)                  |d|d      }t!        j4                  |d   j7                         j9                  d            }|j;                  |d|d|i        |d|        ddlm}  |dt!        j"                  |      j%                  d      ddi       }tA               }|jC                  ||||d|||	xs i !      S # t*        $ ru}t-        |di       j/                  di       j/                  dd      }t-        |di       j/                  di       j/                  dt1        |            }t3        ||      d}~ww xY w)"zR
        Supports both Huggingface Jumpstart embeddings and Voyage models
        r   N)r!   r    r"   region_namezsagemaker-runtime)service_namerA   rC   zE
        response = client.invoke_endpoint(
            EndpointName=zA,
            ContentType="application/json",
            Body=f"z_",  # Use !r for safe representation
            CustomAttributes="accept_eula=true",
        )ri   )rq   request_strrz   zapplication/jsonzaccept_eula=true)EndpointNameContentTypeBodyCustomAttributesr|   r}   r~   r   r   r   rf   r   utf8rq   rr   zraw model_response: )Responsere   zcontent-type)rg   contentrD   )r8   r   rY   rb   rt   r   r   r;   )"boto3r7   Session
access_key
secret_keytokenr   r   r.   r   r   r   r   r   get_model_configtransform_embedding_requestrL   rM   rN   r   invoke_endpointr   r   rK   r0   r   loadsr   decoder   r   r   r   transform_embedding_response)r2   r8   rs   rY   rZ   ra   rb   r   r_   r;   r   r   r5   r#   sessionr   r   r   r   r   provider_configr   r9   r   r|   r   rg   r   HttpxResponsemock_responses                                 r6   	embeddingzSagemakerLLM.embedding7  s   " 	 (,'='=o'N$_ --)44"-"8"8)//'	   
 -@A $O4Xt, ((335LLNDAq))&' #	 # 3CCEJ&BB5/2
 zz,'..w7 !8 
	 	48U 	 	
	Q--".!3	 . H" ::hv.335<<VDE&2D9	 	 	
 	,XJ78 	4 &JJx(//8#%78
 +, ;;&)#%+)/R < 	
 		
G  		Q:r*',%s+  :r*..w;??	3q6R  ![-PP		Qs   )G1 1	I/:A0I**I/)N)__name__
__module____qualname__dictr7   r0   r   r   r   rX   listr   r   r   floatr   Timeoutboolr   r   r   r   r   r   r   r       r6   r   r   %   sm   5,5,@ )-. . 	.
 '(. . . .  ~.t :>!V
V
 V
 &	V

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

  }_
 _
 &_
 _
 _
 3-_
 _
 _
T t
t
 t
 *	t

  t
 t
r   r   )%rL   copyr   typingr   r   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   common_utilsr   r   transformationr   embedding.transformationr   rO   r   r   r   r6   <module>r      s\      = =   + 8 8 7  A + ?"$ F

: F

r   