Ë
    uPêjb(  ã                   óÜ   — d Z ddlZddlZddl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ZddlmZ eZ neZ  G d„ de«      Z!y)zi
Translate from OpenAI's `/v1/chat/completions` to Sagemaker's `/invoke`

In the Huggingface TGI format.
é    N)ÚTYPE_CHECKINGÚAnyÚFinal)Ú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dz  ed<   dZedz  ed<   dZe	dz  ed<   dZ
e	dz  ed<   dZedz  ed<   	 	 	 	 	 d'dedz  dedz  de	dz  de	dz  dedz  ddfd	„Zeˆ fd
„«       Zdededeez  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dz  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 d!d"edz  d#edz  defd$„Z	 	 d(dedz  dedee   deded"edz  d%edz  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	            úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/sagemaker/completion/transformation.pyÚ__init__zSagemakerConfig.__init__/   sF   € ô  ›Ÿ™›ˆØ!Ÿ-™-›/ò 	4‰JˆC�Ø�f‹} Ñ!2Ü˜Ÿ™¨¨UÕ3ñ	4ó    c                 ó    •— t         ‰| �  «       S ©N)ÚsuperÚ
get_config)Úclsr#   s    €r'   r-   zSagemakerConfig.get_config<   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   € Ü mÀÐV]Ô^Ð^r)   Úmodelc                 ó
   — g d¢S )N)Ústreamr   Ú
max_tokensr   r   ÚstopÚn© )r   r5   s     r'   Úget_supported_openai_paramsz+SagemakerConfig.get_supported_openai_paramsC   s   € ò
ð 	
r)   Ú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{®Gáz„?r   r:   Úbest_ofTÚ	do_sampler7   r9   r8   é   r   r   )r!   ÚgetÚpop)r   r=   r>   r5   r?   Úparamr&   s          r'   Úmap_openai_paramsz!SagemakerConfig.map_openai_paramsN   sö   € ð /×4Ñ4Ó6ò 	:‰LˆE�5Ø˜Ò%Ø˜C’< 5¨A¢:ð .×1Ñ1Ð2QÐSXÔYØ $˜à16� Ñ.Ø˜ÒØ+0� Ñ(Ø˜Š|Ø-2� 	Ñ*Ø/3� Ñ,Ø˜Ò Ø,1� Ñ)Ø˜ŠØ*/� Ñ'Ø˜Ò$ð ˜A’:Ø�EØ49�Ð 0Ñ1ØÐ/Ó/Ø49�Ð 0Ò1ð3	:ð4 	×ÑÐ>ÀÔ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_promptr   s  € ð Ð&Ñ&à#5°eÑ#<Ð Ü"Ø.×2Ñ2°7¸DÓAØ%9×%=Ñ%=Ð>TÐVXÓ%YØ#7×#;Ñ#;Ð<PÐRTÓ#UØ!ô	ˆFð6 ˆð+ Ð0Ñ0à#5°mÑ#DÐ Ü"Ø.×2Ñ2°7¸DÓAØ%9×%=Ñ%=Ð>TÐVXÓ%YØ#7×#;Ñ#;Ð<PÐRTÓ#UØ!ô	ˆFð$ ˆð Ð$Ø §¡£Ñ-Ø §¡£Ñ.Ø(G™à(?˜àÒ& ð ô )¨}ÀxÔPˆFàˆ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)r    rF   rE   ÚlitellmrJ   rV   )r   r5   rI   r>   rW   r1   Úinference_paramsr7   ÚdatarJ   rK   rU   s               r'   Útransform_requestz!SagemakerConfig.transform_request™   s£   € ð #2×"6Ñ"6Ó"8ÐØ(×,Ñ,¨X°uÓ=ˆØ)Ð+;Ð<ˆØ�T‰>Ø!ˆD�‰Nà$2×$6Ñ$6Ð7KÈTÓ$RÒ$pÔV]×VpÑVpÐà-×1Ñ1°/À4ÓHˆà×.Ñ.ØØØ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µ   s0   è ø€ ð 6”X˜d×4Ñ4Ó5°e¸XÀÐXfÐhoÓp×pÐpÐpús   ‚#,¥*¦,Úraw_responseÚmodel_responseÚlogging_objÚrequest_dataÚencodingztiktoken.Encoding | NoneÚ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)NrO   Úcomplete_input_dict)Úinputrf   Úoriginal_responseÚadditional_argsrZ   r   Ú
generationÚgenerated_textz<s>rD   z6LiteLLM Error: Unable to parse sagemaker RAW RESPONSE iô  )r3   r0   T)ÚtextÚcount_response_tokensÚchoicesr3   Úcontent)Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚusage)ÚjsonÚ	post_callÚ
isinstanceÚlistÚ
startswithÚreplacerq   r3   rr   Ú	Exceptionr   Údumpsr   rE   ÚintÚtimeÚcreatedr5   r   r"   )r   r5   ra   rb   rc   rd   rI   r>   rW   re   rf   rg   Úcompletion_responserU   Úcompletion_response_choicesÚcompletion_outputrs   rt   rv   s                      r'   Útransform_responsez"SagemakerConfig.transform_response¿   s¦  € ð &2×%6Ñ%6Ó%8Ðà×ÑØØØ1Ø2°LÐAð	 	ô 	
ð % XÑ.ˆð	ÜÐ-¬tÔ4Ø.AÀ!Ñ.DÑ+à.AÐ+Ø "ÐØÐ:Ñ:Ø!Ð%@ÀÑ%NÑNÑ!Ø!Ð%@Ñ@Ø!Ð%@ÐAQÑ%RÑRÐ!ð !×+Ñ+¨FÔ3¸À¹Ø$5×$=Ñ$=¸fÀbÈ!Ó$LÐ!à8IˆN×"Ñ" 1Ñ%×-Ñ-Ô5ô  -Ø¨tô 
ˆô $1Ø 	Ñ*¨1Ñ-¨iÑ8×<Ñ<¸YÈÓKØ"&ô$
Ðô
 "%¤T§Y¡Y£[Ó!1ˆÔØ$ˆÔÜØ'Ø/Ø&Ð):Ñ:ô
ˆô
 	� ¨Ô/ØÐøô/ ò 	Ü ØPÔQU×Q[ÑQ[Ð\oÓQpÐPqÐrØôð ð	ús   ®A9D# Ä#-EÚapi_basec                 ó   — ddi}|�ddi|¥}|S )NzContent-Typezapplication/jsonr;   )r   r1   r5   rI   r>   rW   rf   r†   s           r'   Úvalidate_environmentz$SagemakerConfig.validate_environment  s*   € ð "Ð#5Ð6ˆàÐØ%Ð'9ÐE¸WÐEˆGàˆr)   )NNNNN)NN)"Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r   Úfloatr   r   Úboolr(   Úclassmethodr-   ÚstrÚdictr   r   r4   rz   r<   rH   rV   r   r^   r`   r   r   ÚLiteLLMLoggingObjr…   rˆ   Ú__classcell__)r#   s   @r'   r   r   $   s  ø… ñð "&€N�C˜$‘JÓ%Ø(,Ð˜3 ™:Ó,Ø€Eˆ5�4‰<ÓØ $€K�˜‘Ó$Ø$(Ð�d˜T‘kÓ(ð &*Ø,0Ø"Ø$(Ø(,ñ4à˜d™
ð4ð  # T™zð4ð �t‰|ð	4ð
 ˜T‘\ð4ð  ™+ð4ð 
ó4ð ó$ó ð$ð_¨Sð _¸sð _ÈTÐT[É^ð _Ð`pó _ð	
°ð 	
¸ó 	
ð"à ð"ð ð"ð ð	"ð
 ð"ð 
ó"ðH%àð%ð ð%ð !ð	%ð
 ˜T‘zð%ð 
ó%ðNàðð Ð'Ñ(ðð ð	ð
 ðð ðð 
óð8qàðqð Ð'Ñ(ðqð ð	qð
 ðqð ðqð 
óqð* #Ø!%ñAàðAð ðAð &ð	Að
 'ðAð ðAð Ð'Ñ(ðAð ðAð ðAð -ðAð �t‘ðAð ˜$‘;ðAð 
óAðT #Ø#ñà˜‘ðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
÷r)   r   )"rŒ   rw   r€   Útypingr   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   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjr“   r   r;   r)   r'   ú<module>r¡      s[   ðñó Û ß ,Ñ ,ç +ã Ý 8÷÷ SÝ 6ß 4Ý 'å )áÛåXà*ÑàÐôm�jõ mr)   