
    ^h&                         S r SSKrSSKrSSKJrJrJrJrJrJ	r	  SSK
JrJr  SSKrSSKJr  SSKJrJr  SSKJrJr  SSKJr  SS	KJrJr  S
SKJr  \(       a	  SSKJr  \r O\r  " S S\5      r!g)zj
Translate from OpenAI's `/v1/chat/completions` to Sagemaker's `/invoke`

In the Huggingface TGI format. 
    N)TYPE_CHECKINGAnyDictListOptionalUnion)HeadersResponse)asyncify)custom_promptprompt_factory)
BaseConfigBaseLLMException)AllMessageValues)ModelResponseUsage   SagemakerError)Loggingc                      ^  \ rS rSr% SrSr\\   \S'   Sr	\\
   \S'   Sr\\
   \S'   Sr\\   \S'       S&S\\   S\\
   S\\
   S\\   SS4
S	 jjr\U 4S
 j5       rS\S\S\\\4   S\4S jrS\S\4S jrS\S\S\S\S\4
S jrS\S\S\S\\   S\4
S jrS\S\\   S\S\S\S\4S jrS\S\\   S\S\S\S\4S jr  S'S\S\S\S\ S\S\\   S\S\S \S!\\   S"\\   S\4S# jjr! S(S\\   S\S\\   S\S!\\   S\4S$ jjr"S%r#U =r$$ ))SagemakerConfig!   z
Reference: https://d-uuwbxj1u4cnu.studio.us-west-2.sagemaker.aws/jupyter/default/lab/workspaces/auto-q/tree/DemoNotebooks/meta-textgeneration-llama-2-7b-SDK_1.ipynb
Nmax_new_tokenstop_ptemperaturereturn_full_textreturnc                     [        5       nUR                  5        H(  u  pgUS:w  d  M  Uc  M  [        U R                  Xg5        M*     g )Nself)localsitemssetattr	__class__)r    r   r   r   r   locals_keyvalues           j/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/sagemaker/completion/transformation.py__init__SagemakerConfig.__init__+   s7     (!--/JCf}!23 *    c                     > [         TU ]  5       $ N)super
get_config)clsr$   s    r(   r/   SagemakerConfig.get_config7   s    w!##r+   error_messagestatus_codeheadersc                     [        XUS9$ )N)messager3   r4   r   )r    r2   r3   r4   s       r(   get_error_classSagemakerConfig.get_error_class;   s     !G
 	
r+   modelc                 
    / SQ$ )N)streamr   
max_tokensr   stopn )r    r9   s     r(   get_supported_openai_params+SagemakerConfig.get_supported_openai_paramsB   s    LLr+   non_default_paramsoptional_paramsdrop_paramsc                 <   UR                  5        Hu  u  pVUS:X  a)  US:X  d  US:X  a  UR                  SS5      (       d  SnXbS'   US:X  a  XbS'   US:X  a	  XbS	'   S
US'   US:X  a  XbS'   US:X  a  XbS'   US:X  d  Mi  US:X  a  SnXbS'   Mw     UR                  SS 5        U$ )Nr   g        r   aws_sagemaker_allow_zero_tempFg{Gz?r   r>   best_ofT	do_sampler;   r=   r<      r   )r"   getpop)r    rB   rC   r9   rD   paramr'   s          r(   map_openai_params!SagemakerConfig.map_openai_paramsE   s     /446LE%C<5A: .117  !%16.+0(|-2	*  ,  ,1)*/'$ A:E49 017 78 	>Er+   messagescustom_prompt_dicthf_model_namec                    X;   aB  X1   n[        UR                  SS 5      UR                  SS5      UR                  SS5      US9nU$ XC;   aB  X4   n[        UR                  SS 5      UR                  SS5      UR                  SS5      US9nU$ Uc-  SUR                  5       ;   a  SUR                  5       ;   a  SnOS	nU=(       d    Un[        XBS
9nU$ )Nrolesinitial_prompt_value final_prompt_value)	role_dictrT   rV   rO   zllama-2chatzmeta-llama/Llama-2-7b-chat-hfzmeta-llama/Llama-2-7b)r9   rO   )r   rJ   lowerr   )r    r9   rO   rP   rQ   model_prompt_detailsprompts          r(   _transform_prompt!SagemakerConfig._transform_promptk   s    &#5#< ".227DA%9%=%=*B& $8#;#;<PRT#U!F> / 0#5#D ".227DA%9%=%=*B& $8#;#;<PRT#U!F(  $-.(G(?&  )}PFr+   litellm_paramsc                    UR                  5       nUR                  SS5      nSU0nUSL a  SUS'   UR                  SS 5      =(       d    [        R                  n	UR                  SS 5      n
U R                  UUU	U
S9nXS'   U$ )	Nr;   F
parametersTrP   rQ   )r9   rO   rP   rQ   inputs)copyrK   rJ   litellmrP   r\   )r    r9   rO   rC   r^   r4   inference_paramsr;   datarP   rQ   r[   s               r(   transform_request!SagemakerConfig.transform_request   s     +//1!%%h6"$45T>!DN 3T:Xg>X>X 	 '**?DA''1'	 ( 
  Xr+   c                 X   #    [        U R                  5      " XX4U5      I S h  vN $  N7fr-   )r   rf   )r    r9   rO   rC   r^   r4   s         r(   async_transform_request'SagemakerConfig.async_transform_request   s0      d445_g
 
 	
 
s   !*(*raw_responsemodel_responselogging_objrequest_dataencodingapi_key	json_modec                    UR                  5       nUR                  USUSU0S9  US   n [        U[        5      (       a  US   nOUnSnSU;   a  XS   -  nOSU;   a  XS   -  nUR	                  U5      (       a  SU;   a  UR                  USS	5      nXR                  S   R                  l        [        U	R                  U5      5      n[        U	R                  US   S   S   R                  SS5      5      5      n[        [         R                   " 5       5      Ul        Xl        ['        UUUU-   S9n[)        USU5        U$ ! [         a"    [        S
[         R                  " U5       3SS9ef = f)NrU   complete_input_dict)inputrp   original_responseadditional_argsra   r   
generationgenerated_textz<s>rI   z6LiteLLM Error: Unable to parse sagemaker RAW RESPONSE i  )r6   r3   choicesr6   content)prompt_tokenscompletion_tokenstotal_tokensusage)json	post_call
isinstancelist
startswithreplacery   r6   rz   	Exceptionr   dumpslenencoderJ   inttimecreatedr9   r   r#   )r    r9   rk   rl   rm   rn   rO   rC   r^   ro   rp   rq   completion_responser[   completion_response_choicescompletion_outputr{   r|   r~   s                      r(   transform_response"SagemakerConfig.transform_response   s    +//112LA	 	 	
 h'	-t44.A!.D+.A+ "::!%NN!!%@@!AQ%RR! !++F33$5$=$=fb!$L!8I""1%--5 HOOF34OON95a8CGG	SUVW
 "%TYY[!1$'/&)::

 	/)  	 PQUQ[Q[\oQpPqr 	s   BE ,E0c                      SS0nUb  SS0UEnU$ )NzContent-Typezapplication/jsonr?   )r    r4   r9   rO   rC   rp   s         r(   validate_environment$SagemakerConfig.validate_environment   s*     "#56%'9EWEGr+   r?   )NNNN)NNr-   )%__name__
__module____qualname____firstlineno____doc__r   r   r   __annotations__r   floatr   r   boolr)   classmethodr/   strr   dictr	   r   r7   r   r@   rM   r\   r   rf   ri   r
   r   LiteLLMLoggingObjr   r   __static_attributes____classcell__)r$   s   @r(   r   r   !   s    %)NHSM(!E8E?!#'K%''+htn+ )-!%'++/
4 
4 
4 e_	
4
 #4.
4 

4 $ $
 
/2
=B4==Q
	
M M M$ $ $ 	$
 $ 
$L)) ) !	)
  }) 
)V '( 	
   
<



 '(

 	


 

 

 


. "&$(>> > &	>
 '> > '(> > > > #> D>> 
>L "&$  '(	
  # 
 r+   r   )"r   r   r   typingr   r   r   r   r   r   httpx._modelsr	   r
   rc   #litellm.litellm_core_utils.asyncifyr   3litellm.litellm_core_utils.prompt_templates.factoryr   r   )litellm.llms.base_llm.chat.transformationr   r   litellm.types.llms.openair   litellm.types.utilsr   r   common_utilsr   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   r?   r+   r(   <module>r      sU      B B +  8 S 6 4 )X*lj lr+   