
    h(                         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 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)token_counter   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Zee   ed<   	 	 	 	 	 d&dee   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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max_completion_tokenstop_ptemperaturereturn_full_textreturnc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)	r!   r   r   r   r   r   locals_keyvalues	            l/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/sagemaker/completion/transformation.py__init__zSagemakerConfig.__init__-   sA     (--/!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr&   s    r*   r0   zSagemakerConfig.get_config:   s    w!##r,   error_messagestatus_codeheadersc                     t        |||      S )N)messager3   r4   r   )r!   r2   r3   r4   s       r*   get_error_classzSagemakerConfig.get_error_class>   s     !{G
 	
r,   modelc                 
    g dS )N)streamr   
max_tokensr   r   stopn )r!   r8   s     r*   get_supported_openai_paramsz+SagemakerConfig.get_supported_openai_paramsE   s    eer,   non_default_paramsoptional_paramsdrop_paramsc                 <   |j                         D ]v  \  }}|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(  r|dk(  rd}||d<   |dk(  sr||d<   x |j                  dd        |S )Nr   g        r   aws_sagemaker_allow_zero_tempFg{Gz?r   r=   best_ofT	do_sampler:   r<   r;      r   r   )r$   getpop)r!   r@   rA   r8   rB   paramr)   s          r*   map_openai_paramsz!SagemakerConfig.map_openai_paramsH   s     /446LE5%C<5A: .117 !%16.+0(|-2	*     ,1)*/'$ A:E49 01//49 01; 7< 	>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_dictrQ   rS   rL   zllama-2chatzmeta-llama/Llama-2-7b-chat-hfzmeta-llama/Llama-2-7b)r8   rL   )r   rH   lowerr   )r!   r8   rL   rM   rN   model_prompt_detailsprompts          r*   _transform_promptz!SagemakerConfig._transform_promptp   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 )	Nr:   F
parametersTrM   rN   )r8   rL   rM   rN   inputs)r#   rI   rH   litellmrM   rY   )r!   r8   rL   rA   rZ   r4   inference_paramsr:   datarM   rN   rX   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   ra   )r!   r8   rL   rA   rZ   r4   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        |d      }t        |d   d   d   j                  dd      d      }t        t        j                               |_        ||_        t%        ||||z         }t'        |d|       |S # t        $ r$ t        d
t        j                  |       d      w xY w)NrR   complete_input_dict)inputri   original_responseadditional_argsr]   r   
generationgenerated_textz<s>rG   z6LiteLLM Error: Unable to parse sagemaker RAW RESPONSE i  )r6   r3   T)textcount_response_tokenschoicesr6   content)prompt_tokenscompletion_tokenstotal_tokensusage)json	post_call
isinstancelist
startswithreplacert   r6   ru   	Exceptionr   dumpsr   rH   inttimecreatedr8   r   r%   )r!   r8   rd   re   rf   rg   rL   rA   rZ   rh   ri   rj   completion_responserX   completion_response_choicescompletion_outputrv   rw   ry   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 &t
 *	*1-i8<<YK"&

 "%TYY[!1$'/&)::

 	//  	 PQUQ[Q[\oQpPqr 	s   A9D# #-Eapi_basec                     ddi}|ddi|}|S )NzContent-Typezapplication/jsonr>   )r!   r4   r8   rL   rA   rZ   ri   r   s           r*   validate_environmentz$SagemakerConfig.validate_environment  s*     "#56%'9EWEGr,   )NNNNN)NN)$__name__
__module____qualname____doc__r   r   r   __annotations__r   r   floatr   r   boolr+   classmethodr0   strr   dictr	   r   r7   r   r?   rK   rY   r   ra   rc   r
   r   LiteLLMLoggingObjr   r   __classcell__)r&   s   @r*   r   r   "   s    %)NHSM(+/8C=/!E8E?!#'K%''+htn+ )-/3!%'++/4 4  (}4 	4
 e_4 #4.4 
4 $ $
 
/2
=B4==Q
	
f f f& & & 	&
 & 
&P)) ) !	)
  }) 
)V '( 	
   
<



 '(

 	


 

 

 


. "&$(AA A &	A
 'A A '(A A A A #A D>A 
AT "&"&$  '(	
   # 3- 
r,   r   )$r   rz   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   litellm.utilsr   common_utilsr   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   r>   r,   r*   <module>r      sX      B B +  8 S 6 4 ' )X*uj ur,   