o
    ưi(                     @   s   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raddlm Z! e!Z"neZ"G dd deZ#dS )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                       s  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< 					d0dee dee dee
 dee
 dee ddfd	d
Ze fddZdededeeef defddZdedefddZdededededef
ddZdedededee def
ddZdedee dedededefd d!Zdedee dedededefd"d#Z		d1d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+d,Z!		d1dee dedee deded)ee d-ee defd.d/Z"  Z#S )2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           	      C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S )Nself)localscopyitemssetattr	__class__)	r   r   r   r   r   r   Zlocals_keyvalue r&   g/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/sagemaker/completion/transformation.py__init__.   s   
zSagemakerConfig.__init__c                    s
   t   S N)super
get_config)clsr#   r&   r'   r+   ;   s   
zSagemakerConfig.get_configerror_messagestatus_codeheadersc                 C   s   t |||dS )N)messager/   r0   r   )r   r.   r/   r0   r&   r&   r'   get_error_class?   s   zSagemakerConfig.get_error_classmodelc                 C   s   g dS )N)streamr   
max_tokensr   r   stopnr&   )r   r3   r&   r&   r'   get_supported_openai_paramsF   s   z+SagemakerConfig.get_supported_openai_paramsnon_default_paramsoptional_paramsdrop_paramsc                 C   s   |  D ]V\}}|dkr |dks|dkr|ddsd}||d< |dkr(||d< |dkr4||d	< d
|d< |dkr<||d< |dkrD||d< |dkrR|dkrNd}||d< |dkrZ||d< q|dd  |S )Nr   g        r   Zaws_sagemaker_allow_zero_tempFg{Gz?r   r7   Zbest_ofTZ	do_sampler4   r6   r5      r   r   )r!   getpop)r   r9   r:   r3   r;   paramr%   r&   r&   r'   map_openai_paramsI   s:   z!SagemakerConfig.map_openai_paramsmessagescustom_prompt_dicthf_model_namec                 C   s   ||v r|| }t |dd |dd|dd|d}|S ||v r<|| }t |dd |dd|dd|d}|S |d u rQd| v rQd| v rOd}nd	}|pT|}t||d
}|S )NZrolesinitial_prompt_value final_prompt_value)Z	role_dictrD   rF   rA   zllama-2Zchatzmeta-llama/Llama-2-7b-chat-hfzmeta-llama/Llama-2-7b)r3   rA   )r   r=   lowerr   )r   r3   rA   rB   rC   Zmodel_prompt_detailspromptr&   r&   r'   _transform_promptq   s>   



z!SagemakerConfig._transform_promptlitellm_paramsc                 C   sh   |  }|dd}d|i}|du rd|d< |dd ptj}	|dd }
| j|||	|
d}||d< |S )	Nr4   F
parametersTrB   rC   )r3   rA   rB   rC   inputs)r    r>   r=   litellmrB   rI   )r   r3   rA   r:   rJ   r0   Zinference_paramsr4   datarB   rC   rH   r&   r&   r'   transform_request   s    z!SagemakerConfig.transform_requestc                    s   t | j|||||I d H S r)   )r
   rO   )r   r3   rA   r:   rJ   r0   r&   r&   r'   async_transform_request   s   

z'SagemakerConfig.async_transform_requestraw_responsemodel_responselogging_objrequest_dataencodingapi_key	json_modec                 C   s(  |  }|j|d|d|id |d }z<t|tr|d }n|}d}d|v r-||d 7 }n
d|v r7||d 7 }||rGd|v rG||dd	}||jd j_W n t	yb   t
d
t | ddw t|dd}t|d d d dddd}tt |_||_t|||| d}t|d| |S )NrE   Zcomplete_input_dict)inputrV   original_responseZadditional_argsrL   r   Z
generationZgenerated_textz<s>r<   z6LiteLLM Error: Unable to parse sagemaker RAW RESPONSE i  )r1   r/   T)textZcount_response_tokenschoicesr1   content)prompt_tokenscompletion_tokensZtotal_tokensusage)jsonZ	post_call
isinstancelist
startswithreplacer[   r1   r\   	Exceptionr   dumpsr   r=   inttimecreatedr3   r   r"   )r   r3   rQ   rR   rS   rT   rA   r:   rJ   rU   rV   rW   Zcompletion_responserH   Zcompletion_response_choicesZcompletion_outputr]   r^   r_   r&   r&   r'   transform_response   sT   

z"SagemakerConfig.transform_responseapi_basec                 C   s    ddi}|d urddi|}|S )NzContent-Typezapplication/jsonr&   )r   r0   r3   rA   r:   rJ   rV   rk   r&   r&   r'   validate_environment	  s   
z$SagemakerConfig.validate_environment)NNNNN)NN)$__name__
__module____qualname____doc__r   r   rg   __annotations__r   r   floatr   r   boolr(   classmethodr+   strr   dictr   r   r2   r   r8   r@   rI   r   rO   rP   r	   r   LiteLLMLoggingObjrj   rl   __classcell__r&   r&   r-   r'   r   #   s  
 



(
+

	

J	r   )$rp   r`   rh   typingr   r   r   r   r   r   Zhttpx._modelsr   r	   rM   Z#litellm.litellm_core_utils.asyncifyr
   Z3litellm.litellm_core_utils.prompt_templates.factoryr   r   Z)litellm.llms.base_llm.chat.transformationr   r   Zlitellm.types.llms.openair   Zlitellm.types.utilsr   r   Zlitellm.utilsr   Zcommon_utilsr   Z*litellm.litellm_core_utils.litellm_loggingr   Z_LiteLLMLoggingObjrw   r   r&   r&   r&   r'   <module>   s$     