
    g'                         d Z ddlZddlZddlmZmZmZmZmZm	Z	 ddl
mZmZ ddl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mZ d
dlmZ er	ddlmZ eZ neZ  G d de      Z!y)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                   
    e Zd ZU dZdZee   ed<   dZee	   ed<   dZ
ee	   ed<   dZee   ed<   	 	 	 	 d%dee   dee	   dee	   dee   ddf
dZe fd	       Zd
ededeeef   defdZdedefdZdededededef
dZdedededee   def
dZdedee   dedededefdZdedee   dedededefdZ	 	 d&dedededededee   dededed ee   d!ee   defd"Z 	 	 d&dee   dedee   ded ee   d#ee   defd$Z! xZ"S )'SagemakerConfigz
    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                     t               }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localsitemssetattr	__class__)r   r   r   r   r   locals_keyvalues           e/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/sagemaker/completion/transformation.py__init__zSagemakerConfig.__init__+   s;     (!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr#   s    r'   r-   zSagemakerConfig.get_config7   s    w!##r)   error_messagestatus_codeheadersc                     t        |||      S )N)messager0   r1   r   )r   r/   r0   r1   s       r'   get_error_classzSagemakerConfig.get_error_class;   s     !{G
 	
r)   modelc                 
    g dS )N)streamr   
max_tokensr   stopn )r   r5   s     r'   get_supported_openai_paramsz+SagemakerConfig.get_supported_openai_paramsB   s    LLr)   non_default_paramsoptional_paramsdrop_paramsc                 (   |j                         D ]l  \  }}|dk(  r#|dk(  s|dk(  r|j                  dd      sd}||d<   |dk(  r||d<   |dk(  r
||d	<   d
|d<   |dk(  r||d<   |dk(  r||d<   |dk(  sa|dk(  rd}||d<   n |j                  dd        |S )Nr   g        r   aws_sagemaker_allow_zero_tempFg{Gz?r   r:   best_ofT	do_sampler7   r9   r8      r   )r!   getpop)r   r=   r>   r5   r?   paramr&   s          r'   map_openai_paramsz!SagemakerConfig.map_openai_paramsE   s     /446LE5%C<5A: .117 !%16.+0(|-2	*  ,  ,1)*/'$ A:E49 017 78 	>Er)   messagescustom_prompt_dicthf_model_namec                    ||v rF||   }t        |j                  dd       |j                  dd      |j                  dd      |      }|S ||v rF||   }t        |j                  dd       |j                  dd      |j                  dd      |      }|S |)d|j                         v rd|j                         v rd}nd	}|xs |}t        ||
      }|S )Nrolesinitial_prompt_value final_prompt_value)	role_dictrN   rP   rI   zllama-2chatzmeta-llama/Llama-2-7b-chat-hfzmeta-llama/Llama-2-7b)r5   rI   )r   rE   lowerr   )r   r5   rI   rJ   rK   model_prompt_detailsprompts          r'   _transform_promptz!SagemakerConfig._transform_promptk   s    &&#5e#< ".227DA%9%=%=*B& $8#;#;<PRT#U!F> / 00#5m#D ".227DA%9%=%=*B& $8#;#;<PRT#U!F(  $-.(G(?&  )}xPFr)   litellm_paramsc                    |j                         }|j                  dd      }d|i}|du rd|d<   |j                  dd       xs t        j                  }	|j                  dd       }
| j                  |||	|
      }||d<   |S )	Nr7   F
parametersTrJ   rK   )r5   rI   rJ   rK   inputs)copyrF   rE   litellmrJ   rV   )r   r5   rI   r>   rW   r1   inference_paramsr7   datarJ   rK   rU   s               r'   transform_requestz!SagemakerConfig.transform_request   s     +//1!%%h6"$45T>!DN 3T:Xg>X>X 	 '**?DA''1'	 ( 
  Xr)   c                 \   K    t        | j                        |||||       d {   S 7 wr+   )r   r_   )r   r5   rI   r>   rW   r1   s         r'   async_transform_requestz'SagemakerConfig.async_transform_request   s7      6Xd4458_ng
 
 	
 
s   #,*,raw_responsemodel_responselogging_objrequest_dataencodingapi_key	json_modec                    |j                         }|j                  |d|d|i       |d   }	 t        |t              r|d   }n|}d}d|v r	||d   z  }nd|v r||d   z  }|j	                  |      rd|v r|j                  |dd	      }||j                  d   j                  _        t        |	j                  |            }t        |	j                  |d   d   d   j                  dd                  }t        t!        j                                |_        ||_        t'        ||||z         }t)        |d|       |S # t        $ r$ t        d
t        j                  |       d      w xY w)NrO   complete_input_dict)inputrg   original_responseadditional_argsrZ   r   
generationgenerated_textz<s>rD   z6LiteLLM Error: Unable to parse sagemaker RAW RESPONSE i  )r3   r0   choicesr3   content)prompt_tokenscompletion_tokenstotal_tokensusage)json	post_call
isinstancelist
startswithreplacerp   r3   rq   	Exceptionr   dumpslenencoderE   inttimecreatedr5   r   r"   )r   r5   rb   rc   rd   re   rI   r>   rW   rf   rg   rh   completion_responserU   completion_response_choicescompletion_outputrr   rs   ru   s                      r'   transform_responsez"SagemakerConfig.transform_response   s    +//112LA	 	 	
 h'	-t4.A!.D+.A+ "::!%@%NN!!%@@!%@AQ%RR! !++F3$5$=$=fb!$L!8IN""1%--5 HOOF34OON95a8CGG	SUVW
 "%TYY[!1$'/&)::

 	/)  	 PQUQ[Q[\oQpPqr 	s   A9D= =-E*api_basec                     ddi}|ddi|}|S )NzContent-Typezapplication/jsonr;   )r   r1   r5   rI   r>   rg   r   s          r'   validate_environmentz$SagemakerConfig.validate_environment   s*     "#56%'9EWEGr)   )NNNN)NN)#__name__
__module____qualname____doc__r   r   r   __annotations__r   floatr   r   boolr(   classmethodr-   strr   dictr	   r   r4   r   r<   rH   rV   r   r_   ra   r
   r   LiteLLMLoggingObjr   r   __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 "&"&$  '(	
  # 3- 
r)   r   )"r   rv   r   typingr   r   r   r   r   r   httpx._modelsr	   r
   r\   #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*mj mr)   