Ë
    uPêj.  ã                  ó<  — d dl mZ d dlZd dlmZmZmZ d dlZd dl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" erd dl#m$Z$ neZ$ G d„ de	«      Z%e&e   e&e   z  e&e   z  e&e   z  Z' G d„ de «      Z(y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚFinal)Ú	BaseModel)Úverbose_logger)ÚLogging)ÚAmazonNovaCanvasConfig)ÚAmazonStabilityConfig)ÚAmazonStability3Config)Ú AmazonTitanImageGenerationConfig)ÚAsyncHTTPHandlerÚHTTPHandlerÚ_get_httpx_clientÚget_async_httpx_client)ÚImageResponseé   )Ú
BaseAWSLLM)ÚBedrockError)ÚAWSPreparedRequestc                  ó:   — e Zd ZU dZded<   ded<   ded<   ded	<   y
)ÚBedrockImagePreparedRequestzV
    Internal/Helper class for preparing the request for bedrock image generation
    ÚstrÚendpoint_urlr   ÚpreppedÚbytesÚbodyÚdictÚdataN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/image_generation/image_handler.pyr   r   )   s   … ñð ÓØÓØ
ƒKØ
„Jr&   r   c                  óö   — e Zd ZdZed
d„«       Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z		 	 	 	 	 	 	 	 dd„Z
	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„Zy)ÚBedrockImageGenerationz*
    Bedrock Image Generation handler
    c                óÄ   — t        j                  |«      rt         S t        j                  |«      rt        S t	        j
                  |«      rt        S t        j                  S ©N)r   Ú_is_titan_modelr
   Ú_is_nova_modelr   Ú_is_stability_3_modelÚlitellmr   )ÚclsÚmodels     r'   Úget_config_classz'BedrockImageGeneration.get_config_classA   sJ   € ä+×;Ñ;¸EÔBÜ3Ð3Ü#×2Ñ2°5Ô9Ü)Ð)Ü#×9Ñ9¸%Ô@Ü)Ð)ä×0Ñ0Ð0r&   Nc                ó–  — | j                  ||||	|||¬«      }|du r1| j                  |||||||
�t        |
t        «      r|
¬«      S d ¬«      S |
�t        |
t        «      s
t        «       }
	 |
j                  |j                  |j                  j                  |j                  ¬«      }|j                  «        | j'                  ||||||j(                  ¬«      }|S # t        j                  $ r<}|j                  j                  }t!        ||j                  j"                  ¬«      ‚d }~wt        j$                  $ r t!        dd¬«      ‚w xY w)	N)r1   Úoptional_paramsÚapi_baseÚextra_headersÚlogging_objÚpromptÚapi_keyT)Úprepared_requestÚtimeoutr1   r7   r8   Úmodel_responseÚclient©ÚurlÚheadersr   ©Ústatus_codeÚmessageé˜  úTimeout error occurred.)r<   r1   r7   r8   Úresponser   )Ú_prepare_requestÚasync_image_generationÚ
isinstancer   r   r   Úpostr   r   r@   r   Úraise_for_statusÚhttpxÚHTTPStatusErrorrF   rB   r   ÚtextÚTimeoutExceptionÚ+_transform_response_dict_to_openai_responser   )Úselfr1   r8   r<   r4   r7   r;   Úaimg_generationr5   r6   r=   r9   r:   rF   ÚerrÚ
error_codes                   r'   Úimage_generationz'BedrockImageGeneration.image_generationL   s€  € ð #'×"7Ñ"7ØØ+ØØ'Ø#ØØð #8ó #
Ðð ˜dÑ"Ø×.Ñ.Ø!1ØØØ'ØØ-Ø"(Ð"4¼ÀFÔL\Ô9]˜ð /ó ð ð dhð /ó ð ð ˆ>¤¨F´KÔ!@Ü&Ó(ˆFð	SØ$Ÿk™kØ$×1Ñ1Ø(×0Ñ0×8Ñ8Ø%×*Ñ*ð *ó ˆHð
 ×%Ñ%Ô'ð ×IÑIØ)ØØ#ØØØ!×&Ñ&ð Jó 
ˆð Ðøô ×$Ñ$ò 	RØ #§¡× 8Ñ 8ˆJÜ¨:¸s¿|¹|×?PÑ?PÔQÐQûÜ×%Ñ%ò 	SÜ¨3Ð8QÔRÐRð	Sús   Á+AC ÃEÃ-7D$Ä$$Ec              ƒ  ó6  K  — |xs' t        t        j                  j                  d|i¬«      }	 |j	                  |j
                  |j                  j                  |j                  ¬«      ƒ d{  –—† }	|	j                  «        | j#                  ||||	|j$                  |¬«      }|S 7 Œ7# t        j                  $ r<}
|
j                  j                  }t        ||
j                  j                  ¬«      ‚d}
~
wt        j                   $ r t        dd¬«      ‚w xY w­w)	z‹
        Asynchronous handler for bedrock image generation

        Awaits the response from the bedrock image generation endpoint
        r;   )Úllm_providerÚparamsr>   NrA   rD   rE   )r1   r7   r8   rF   r   r<   )r   r/   ÚLlmProvidersÚBEDROCKrJ   r   r   r@   r   rK   rL   rM   rF   rB   r   rN   rO   rP   r   )rQ   r:   r;   r1   r7   r8   r<   r=   Úasync_clientrF   rS   rT   s               r'   rH   z-BedrockImageGeneration.async_image_generationˆ   s  è ø€ ð %ò 
Ô(>Ü ×-Ñ-×5Ñ5Ø˜wÐ'ô)
ˆð
	SØ$0×$5Ñ$5Ø$×1Ñ1Ø(×0Ñ0×8Ñ8Ø%×*Ñ*ð %6ó %÷ ˆHð
 ×%Ñ%Ô'ð ×IÑIØØ#ØØØ!×&Ñ&Ø)ð Jó 
ˆð Ðð+ùô ×$Ñ$ò 	RØ #§¡× 8Ñ 8ˆJÜ¨:¸s¿|¹|×?PÑ?PÔQÐQûÜ×%Ñ%ò 	SÜ¨3Ð8QÔRÐRð	Süs:   ‚,D¯?B( Á.B&Á/B( Â#DÂ&B( Â(DÂ;7C2Ã2$DÄDc                ón   — i }|j                  dd«      }|j                  dd«      }|�||d<   |�||d<   |S )z`
        Extract guardrail parameters from optional_params and convert them to headers.
        ÚguardrailIdentifierNÚguardrailVersionz"x-amz-bedrock-guardrail-identifierzx-amz-bedrock-guardrail-version)Úpop)rQ   r4   r@   Úguardrail_identifierÚguardrail_versions        r'   Ú%_extract_headers_from_optional_paramsz<BedrockImageGeneration._extract_headers_from_optional_params´   sY   € ð ˆØ&5×&9Ñ&9Ð:OÐQUÓ&VÐØ#2×#6Ñ#6Ð7IÈ4Ó#PÐàÐ+Ø<PˆGÐ8Ñ9ØÐ(Ø9JˆGÐ5Ñ6àˆr&   c           	     ó\  — | j                  ||«      }| j                  |«      }	| j                  ||	|¬«      }
| j                  ||j                  |j
                  ¬«      \  }}|› d|
› d�}| j                  |||¬«      }t        j                  |«      j                  d«      }ddi}|�ddi|¥}| j                  |«      }|j                  |«       | j                  |j                  |j
                  |||||¬	«      }|j                  |d
|||j                  dœ¬«       t!        ||||¬«      S )a�  
        Prepare the request body, headers, and endpoint URL for the Bedrock Image Generation API

        Args:
            model (str): The model to use for the image generation
            optional_params (dict): The optional parameters for the image generation
            api_base (Optional[str]): The base URL for the Bedrock API
            extra_headers (Optional[dict]): The extra headers to include in the request
            logging_obj (LitellmLogging): The logging object to use for logging
            prompt (str): The prompt to use for the image generation
        Returns:
            BedrockImagePreparedRequest: The prepared request object

        The BedrockImagePreparedRequest contains:
            endpoint_url (str): The endpoint URL for the Bedrock Image Generation API
            prepped (httpx.Request): The prepared request object
            body (bytes): The request body
        )r1   Úproviderr4   )r5   Úaws_bedrock_runtime_endpointÚaws_region_namez/model/z/invoke)r1   r8   r4   zutf-8zContent-Typezapplication/json)Úcredentialsrf   r6   r   r   r@   r9   Ú )Úcomplete_input_dictr5   r@   )Úinputr9   Úadditional_args)r   r   r   r   )Ú*_get_boto_credentials_from_optional_paramsÚget_bedrock_invoke_providerÚget_bedrock_model_idÚget_runtime_endpointre   rf   Ú_get_request_bodyÚjsonÚdumpsÚencoderb   ÚupdateÚget_request_headersrg   Úpre_callr@   r   )rQ   r1   r4   r5   r6   r7   r8   r9   Úboto3_credentials_infoÚbedrock_providerÚmodelIdÚ_Úproxy_endpoint_urlr   r   r@   Úguardrail_headersr   s                     r'   rG   z'BedrockImageGeneration._prepare_requestÃ   sŠ  € ð8 )-×(WÑ(WÐXgÐinÓ(oÐð #'×"BÑ"BÀ5Ó"IÐà×2Ñ2ØØ%Ø+ð 3ó 
ˆð
 !%× 9Ñ 9ØØ)?×)\Ñ)\Ø2×BÑBð !:ó !
ÑˆÐð
 !3Ð3°7¸7¸)À7ÐKÐØ×,Ñ,ØØØ+ð -ó 
ˆô —j‘j Ó&×-Ñ-¨gÓ6ˆØ!Ð#5Ð6ˆØÐ$Ø%Ð'9ÐK¸]ÐKˆGð $(×#MÑ#MÈoÓ#^ÐØ�‰Ð(Ô)à×1Ñ1Ø.×:Ñ:Ø2×BÑBØ'Ø+ØØØð 2ó 
ˆð 	×ÑØØà'+Ø.Ø"Ÿ?™?ñð 	ô 	
ô +Ø+ØØØô	
ð 	
r&   c                ób   — | j                  |¬«      }|j                  ||¬«      }t        |«      S )zû
        Get the request body for the Bedrock Image Generation API

        Checks the model/provider and transforms the request body accordingly

        Returns:
            dict: The request body to use for the Bedrock Image Generation API
        ©r1   )rN   r4   )r2   Útransform_request_bodyr   )rQ   r1   r8   r4   Úconfig_classÚrequest_bodys         r'   rp   z(BedrockImageGeneration._get_request_body  s8   € ð #×3Ñ3¸%Ð3Ó@ˆØ*×AÑAÀvÐ_nÐAÓoˆÜ�LÓ!Ð!r&   c                ó  — |�!|j                  |d|j                  d|i¬«       t        j                  d|j                  «       |j	                  «       }|€t        d«      ‚| j                  |¬«      }|j                  ||¬«       |S )zX
        Transforms the Image Generation response from Bedrock to OpenAI format
        rh   ri   )rj   r9   Úoriginal_responserk   zraw model_response: %sz)Error in response object format, got Noner~   )r<   Úresponse_dict)Ú	post_callrN   r   Údebugrq   Ú
ValueErrorr2   Ú*transform_response_dict_to_openai_response)	rQ   r<   r1   r7   r8   rF   r   r„   r€   s	            r'   rP   zBBedrockImageGeneration._transform_response_dict_to_openai_response,  s›   € ð Ð"Ø×!Ñ!ØØØ"*§-¡-Ø!6¸Ð =ð	 "ô ô 	×ÑÐ5°x·}±}ÔEØ'Ÿ}™}›ˆØÐ ÜÐHÓIÐIà"×3Ñ3¸%Ð3Ó@ˆà×?Ñ?Ø)Ø'ð 	@ô 	
ð
 Ðr&   )r1   ú
str | NoneÚreturnÚBedrockImageConfigClass)FNNNN)r1   r   r8   r   r<   r   r4   r   r7   ÚLitellmLoggingr;   úfloat | httpx.Timeout | NonerR   Úboolr5   r‰   r6   údict | Noner=   z%HTTPHandler | AsyncHTTPHandler | Noner9   r‰   r+   )r:   r   r;   r�   r1   r   r7   rŒ   r8   r   r<   r   r=   zAsyncHTTPHandler | NonerŠ   r   )r4   r   rŠ   r   )r1   r   r4   r   r5   r‰   r6   r�   r7   rŒ   r8   r   r9   r‰   rŠ   r   )r1   r   r8   r   r4   r   rŠ   r   )r<   r   r1   r   r7   rŒ   r8   r   rF   zhttpx.Responser   r   rŠ   r   )r    r!   r"   r#   Úclassmethodr2   rU   rH   rb   rG   rp   rP   r%   r&   r'   r)   r)   <   sÍ  „ ñð ò1ó ð1ð$ !&Ø#Ø%)Ø8<Ø"ð:àð:ð ð:ð &ð	:ð
 ð:ð $ð:ð .ð:ð ð:ð ð:ð #ð:ð 6ð:ð ó:ðH +/ð*à5ð*ð .ð*ð ð	*ð
 $ð*ð ð*ð &ð*ð (ð*ð 
ó*óXðU
àðU
ð ðU
ð ð	U
ð
 #ðU
ð $ðU
ð ðU
ð ðU
ð 
%óU
ðn"àð"ð ð"ð ð	"ð
 
ó"ð$!à%ð!ð ð!ð $ð	!ð
 ð!ð !ð!ð ð!ð 
ô!r&   r)   ))Ú
__future__r   rq   Útypingr   r   r   rL   Úpydanticr   r/   Úlitellm._loggingr   Ú*litellm.litellm_core_utils.litellm_loggingr	   rŒ   ÚGlitellm.llms.bedrock.image_generation.amazon_nova_canvas_transformationr
   ÚFlitellm.llms.bedrock.image_generation.amazon_stability1_transformationr   ÚFlitellm.llms.bedrock.image_generation.amazon_stability3_transformationr   ÚAlitellm.llms.bedrock.image_generation.amazon_titan_transformationr   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   r   Úlitellm.types.utilsr   Úbase_aws_llmr   Úcommon_utilsr   Úbotocore.awsrequestr   r   Útyper‹   r)   r%   r&   r'   ú<module>r       s«   ðÝ "ã ß ,Ñ ,ã Ý ã Ý +Ý Põõõõ÷ó õ .å %Ý 'áÞ6àÐô )ô ð 	Ð	)Ñ*Ø
Ð!Ñ"ñ#à
Ð!Ñ"ñ#ð Ð Ñ!ñ"ð ôQ˜Zõ Qr&   