Ë
    uPêjp   ã                   óî   — d Z ddlmZmZmZmZ ddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZm Z  er	ddl!m"Z# e#Z$neZ$ G d„ dee«      Z%y)a=  
Translate from OpenAI's `/v1/chat/completions` to Sagemaker's `/invocations` API

Called if Sagemaker endpoint supports HF Messages API.

LiteLLM Docs: https://docs.litellm.ai/docs/providers/aws_sagemaker#sagemaker-messages-api
Huggingface Docs: https://huggingface.co/docs/text-generation-inference/en/messages_api
é    )ÚTYPE_CHECKINGÚAnyÚFinalÚcastN)ÚHeaders)Úget_aws_dns_suffix)Útrack_llm_api_timing)ÚCustomStreamWrapper)ÚBaseLLMException)Ú
BaseAWSLLM)ÚAsyncHTTPHandlerÚHTTPHandlerÚ_get_httpx_clientÚget_async_httpx_client)ÚAllMessageValues)ÚLlmProvidersé   )ÚOpenAIGPTConfigé   )ÚAWSEventStreamDecoderÚSagemakerError)ÚLoggingc                   ó6  ‡ — e Zd Zd„ Zdededeez  defd„Z		 	 ddeded	e
e   d
edededz  dedz  defd„Zded	e
e   d
edededefˆ fd„Z	 d dedz  dedz  ded
edededz  defd„Z	 	 	 	 d!ded
ededededz  dedz  dedz  dedz  deeedz  f   fd„Zedefd„«       Zedefd„«       Z e«       	 	 	 d"dedededededed	e
deez  dz  dedz  dedz  defd„«       Z e«       	 	 	 d"dedededededed	e
deez  dz  dedz  dedz  defd„«       Zˆ xZS )#ÚSagemakerChatConfigc                 ó\   — t        j                  | fi |¤Ž t        j                  | fi |¤Ž y ©N)r   Ú__init__r   )ÚselfÚkwargss     úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/sagemaker/chat/transformation.pyr   zSagemakerChatConfig.__init__)   s(   € Ü× Ñ  Ñ0¨Ò0Ü×Ñ˜DÑ+ FÓ+ó    Úerror_messageÚstatus_codeÚheadersÚreturnc                 ó   — t        |||¬«      S )N)r#   Úmessager$   )r   )r   r"   r#   r$   s       r    Úget_error_classz#SagemakerChatConfig.get_error_class-   s   € Ü¨+¸}ÐV]Ô^Ð^r!   NÚmodelÚmessagesÚoptional_paramsÚlitellm_paramsÚapi_keyÚapi_basec                 óX   — |j                  d«      }t        |t        «      s|S i |¥d|i¥S )NÚmodel_idz$X-Amzn-SageMaker-Inference-Component)ÚgetÚ
isinstanceÚstr)	r   r$   r)   r*   r+   r,   r-   r.   Úinference_component_names	            r    Úvalidate_environmentz(SagemakerChatConfig.validate_environment0   s9   € ð +:×*=Ñ*=¸jÓ*IÐ ÜÐ2´CÔ8ØˆNØ\�'Ð\ÐAÐC[Ñ\Ð\r!   c                 ó‚   •— t         ‰| �  |||||¬«      }|j                  d«      }t        |t        «      s|S i |¥d|i¥S )N)r)   r*   r+   r,   r$   Úhf_model_namer)   )ÚsuperÚtransform_requestr1   r2   r3   )	r   r)   r*   r+   r,   r$   ÚrequestÚserved_model_nameÚ	__class__s	           €r    r9   z%SagemakerChatConfig.transform_request?   s^   ø€ ô ™Ñ2ØØØ+Ø)Øð 3ó 
ˆð $2×#5Ñ#5°oÓ#FÐÜÐ+¬SÔ1ØˆNØ6�'Ð6˜7Ð$5Ñ6Ð6r!   Ústreamc                 óÊ   — | j                  ||d ¬«      }t        |«      }|du rd|› d|› d|› d�}nd|› d|› d|› d�}t        t        d z  |j	                  d«      «      }	|	�|	}|S )	N)r+   r)   r0   Tzhttps://runtime.sagemaker.ú.z/endpoints/z/invocations-response-streamz/invocationsÚsagemaker_base_url)Ú_get_aws_region_namer   r   r3   r1   )
r   r.   r-   r)   r+   r,   r=   Úaws_region_nameÚ
dns_suffixr@   s
             r    Úget_complete_urlz$SagemakerChatConfig.get_complete_urlS   s£   € ð "&×!:Ñ!:Ø+ØØð ";ó "
ˆô
 /¨Ó?ˆ
Ø�T‰>Ø3°OÐ3DÀAÀjÀ\ÐQ\Ð]bÐ\cÐcð  A‰Hà3°OÐ3DÀAÀjÀ\ÐQ\Ð]bÐ\cÐcoÐpˆHä$(¬¨t©°_×5HÑ5HÐI]Ó5^Ó$_ÐØÐ)Ø)ˆHàˆr!   Úrequest_dataÚfake_streamc	           
      ó4   — | j                  d|||||||¬«      S )NÚ	sagemaker)Úservice_namer$   r+   rE   r.   r)   r=   rF   )Ú_sign_request)	r   r$   r+   rE   r.   r-   r)   r=   rF   s	            r    Úsign_requestz SagemakerChatConfig.sign_requestm   s4   € ð ×!Ñ!Ø$ØØ+Ø%ØØØØ#ð "ó 	
ð 		
r!   c                  ó   — y)NT© ©r   s    r    Úhas_custom_stream_wrapperz-SagemakerChatConfig.has_custom_stream_wrapperƒ   s   € àr!   c                  ó   — y)NFrM   rN   s    r    Ú%supports_stream_param_in_request_bodyz9SagemakerChatConfig.supports_stream_param_in_request_body‡   s   € àr!   Úcustom_llm_providerÚlogging_objÚdataÚclientÚ	json_modeÚsigned_json_bodyc                 óî  — |�t        |t        «      rt        i ¬«      }	 |j                  |||
�|
n|d|¬«      }|j                  dk7  r!t        |j                  |j                  ¬«      ‚t        dd¬«      }|j                  |j                  «       «      }t        ||||¬«      }|S # t        j
                  $ r:}t        |j                  j                  |j                  j                  ¬«      ‚d }~ww xY w)	N)ÚparamsT©r$   rT   r=   rS   ©r#   r'   éÈ   Ú ©r)   Úis_messages_api©Úcompletion_streamr)   rR   rS   )r2   r   r   ÚpostÚhttpxÚHTTPStatusErrorr   Úresponser#   Útextr   Ú
iter_bytesr
   )r   r)   rR   rS   r.   r$   rT   r*   rU   rV   rW   re   ÚeÚcustom_stream_decoderra   Ústreaming_responses                   r    Úget_sync_custom_stream_wrapperz2SagemakerChatConfig.get_sync_custom_stream_wrapper‹   sô   € ð ˆ>œZ¨Ô0@ÔAÜ&¨bÔ1ˆFð		^Ø$Ÿk™kØØØ)9Ð)EÑ%È4ØØ'ð *ó ˆHð ×Ñ 3Ò&Ü ¨X×-AÑ-AÈ8Ï=É=ÔYÐYä'<À2ÐW[Ô'\ÐØ#8×#CÑ#CÀH×DWÑDWÓDYÓ#ZÐä$7Ø/ØØ 3Ø#ô	%
Ðð "Ð!øô ×$Ñ$ò 	^Ü ¨Q¯Z©Z×-CÑ-CÈQÏZÉZÏ_É_Ô]Ð]ûð	^ús    B' Â'C4Â:5C/Ã/C4c              ƒ   ób  K  — |�t        |t        «      r	 t        |«      }t        |i ¬«      }	 |j                  |||
�|
n|d|¬«      ƒ d {  –—† }|j                  dk7  r!t        |j                  |j                  ¬«      ‚t        dd¬«      }|j                  |j                  «       «      }t        ||||¬«      }|S # t        $ r t        j                  }Y Œ¸w xY w7 Œ�# t        j                  $ r:}t        |j                  j                  |j                  j                  ¬«      ‚d }~ww xY w­w)	N)Úllm_providerrY   TrZ   r[   r\   r]   r^   r`   )r2   r   r   Ú
ValueErrorÚSAGEMAKER_CHATr   rb   rc   rd   r   re   r#   rf   r   Úaiter_bytesr
   )r   r)   rR   rS   r.   r$   rT   r*   rU   rV   rW   rm   re   rh   ri   ra   rj   s                    r    Úget_async_custom_stream_wrapperz3SagemakerChatConfig.get_async_custom_stream_wrapperµ   s0  è ø€ ð ˆ>œZ¨´Ô<ð;Ü+Ð,?Ó@�ô ,¸ÈbÔQˆFð		^Ø$*§K¡KØØØ)9Ð)EÑ%È4ØØ'ð %0ó %÷ ˆHð ×Ñ 3Ò&Ü ¨X×-AÑ-AÈ8Ï=É=ÔYÐYä'<À2ÐW[Ô'\ÐØ#8×#DÑ#DÀX×EYÑEYÓE[Ó#\Ðä$7Ø/ØØ 3Ø#ô	%
Ðð "Ð!øô7 ò ;Ü+×:Ñ:’ð;úð
ùô ×$Ñ$ò 	^Ü ¨Q¯Z©Z×-CÑ-CÈQÏZÉZÏ_É_Ô]Ð]ûð	^üs]   ‚D/–B> ¡D/¯C ÁCÁC ÁA-D/Â>CÃD/ÃCÃD/ÃC ÃD,Ã25D'Ä'D,Ä,D/)NNr   )NNNN)NNN)Ú__name__Ú
__module__Ú__qualname__r   r3   ÚintÚdictr   r   r(   Úlistr   r5   r9   ÚboolrD   ÚtupleÚbytesrK   ÚpropertyrO   rQ   r	   ÚLiteLLMLoggingObjr   r   r
   rk   rq   Ú__classcell__)r<   s   @r    r   r   (   sH  ø„ ò,ð_¨Sð _¸sð _ÈTÐT[É^ð _Ð`pó _ð #Ø#ñ]àð]ð ð]ð Ð'Ñ(ð	]ð
 ð]ð ð]ð �t‘ð]ð ˜‘*ð]ð 
ó]ð7àð7ð Ð'Ñ(ð7ð ð	7ð
 ð7ð ð7ð 
õ7ð6 #ñà˜‘*ðð �t‘ðð ð	ð
 ðð ðð �t‘ðð 
óð@ #Ø Ø"Ø#'ñ
àð
ð ð
ð ð	
ð
 ð
ð �t‘ð
ð �T‰zð
ð �t‘ð
ð ˜D‘[ð
ð 
ˆt�U˜T‘\Ð!Ñ	"ó
ð, ð¨4ò ó ðð ð°tò ó ðñ Óð 9=Ø!%Ø)-ñ'"àð'"ð !ð'"ð 'ð	'"ð
 ð'"ð ð'"ð ð'"ð ð'"ð Ð.Ñ.°Ñ5ð'"ð ˜$‘;ð'"ð   $™,ð'"ð 
ò'"ó ð'"ñR Óð 9=Ø!%Ø)-ñ+"àð+"ð !ð+"ð 'ð	+"ð
 ð+"ð ð+"ð ð+"ð ð+"ð Ð.Ñ.°Ñ5ð+"ð ˜$‘;ð+"ð   $™,ð+"ð 
ò+"ó ô+"r!   r   )&Ú__doc__Útypingr   r   r   r   rc   Úhttpx._modelsr   Ú(litellm.litellm_core_utils.aws_partitionr   Ú(litellm.litellm_core_utils.logging_utilsr	   Ú,litellm.litellm_core_utils.streaming_handlerr
   Ú)litellm.llms.base_llm.chat.transformationr   Ú!litellm.llms.bedrock.base_aws_llmr   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   r   Úlitellm.types.llms.openair   Úlitellm.types.utilsr   Úopenai.chat.gpt_transformationr   Úcommon_utilsr   r   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjr|   r   rM   r!   r    ú<module>r�      sa   ðñ÷ 3Ó 2ã Ý !å GÝ IÝ LÝ FÝ 8÷ó õ 7Ý ,å =ß @áÝXà*ÑàÐôy"˜/¨:õ y"r!   