Ë
    uPêj�*  ã                  óú   — d Z 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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" G d„ de«      Z#y)zW
Bedrock Image Edit Handler

Handles image edit requests for Bedrock stability models.
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚFinal)Ú	BaseModel)Úverbose_logger)ÚLogging)Ú&BedrockAmazonNovaCanvasImageEditConfig)ÚBedrockStabilityImageEditConfig)Ú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
)ÚBedrockImageEditPreparedRequestzP
    Internal/Helper class for preparing the request for bedrock image edit
    ÚstrÚendpoint_urlr   ÚpreppedÚbytesÚbodyÚdictÚdataN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/image_edit/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
y)ÚBedrockImageEditz$
    Bedrock Image Edit handler
    c                óŒ   — t        j                  |«      rt         S t        j                  |«      rt        S t	        d|›d�«      ‚)Nz&Unsupported Bedrock image-edit model: zk. Use a stability.* image-edit model id or add supports_nova_canvas_image_edit in model_prices for this id.)r   Ú_is_stability_edit_modelr
   Ú _is_nova_canvas_image_edit_modelÚ
ValueError)ÚclsÚmodels     r%   Úget_config_classz!BedrockImageEdit.get_config_class9   sI   € ä*×CÑCÀEÔJÜ2Ð2Ü1×RÑRÐSXÔYÜ9Ð9ÜØ4°U°Ið >+ð +ó
ð 	
r$   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)r-   ÚimageÚpromptÚoptional_paramsÚapi_baseÚextra_headersÚlogging_objÚapi_keyT)Úprepared_requestÚtimeoutr-   r5   r1   Úmodel_responseÚclient©ÚurlÚheadersr   ©Ústatus_codeÚmessageé˜  úTimeout error occurred.)r9   r-   r5   r1   Úresponser   )Ú_prepare_requestÚasync_image_editÚ
isinstancer   r   r   Úpostr   r   r=   r   Úraise_for_statusÚhttpxÚHTTPStatusErrorrC   r?   r   ÚtextÚTimeoutExceptionÚ+_transform_response_dict_to_openai_responser   )Úselfr-   r0   r1   r9   r2   r5   r8   Úaimage_editr3   r4   r:   r6   r7   rC   ÚerrÚ
error_codes                    r%   Ú
image_editzBedrockImageEdit.image_editE   sƒ  € ð #'×"7Ñ"7ØØØØ+ØØ'Ø#Øð #8ó 	#
Ðð ˜$ÑØ×(Ñ(Ø!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 edit
        r8   )Úllm_providerÚparamsr;   Nr>   rA   rB   )r-   r5   r1   rC   r   r9   )r   ÚlitellmÚLlmProvidersÚBEDROCKrG   r   r   r=   r   rH   rI   rJ   rC   r?   r   rK   rL   rM   r   )rN   r7   r8   r-   r5   r1   r9   r:   Úasync_clientrC   rP   rQ   s               r%   rE   z!BedrockImageEdit.async_image_edit„   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	           	     ó  — | j                  ||«      }	| j                  |«      }
| j                  ||
|¬«      }| j                  ||	j                  |	j
                  ¬«      \  }}|› d|› d�}| j                  ||||¬«      }t        j                  |«      j                  d«      }ddi}|�ddi|¥}| j                  |	j                  |	j
                  |||||¬	«      }|j                  |d
|||j                  dœ¬«       t        ||||¬«      S )aê  
        Prepare the request body, headers, and endpoint URL for the Bedrock Image Edit API

        Args:
            model (str): The model to use for the image edit
            image (list): The images to edit
            prompt (Optional[str]): The prompt for the edit
            optional_params (dict): The optional parameters for the image edit
            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
            api_key (Optional[str]): The API key to use

        Returns:
            BedrockImageEditPreparedRequest: The prepared request object
        )r-   Úproviderr2   )r3   Úaws_bedrock_runtime_endpointÚaws_region_namez/model/z/invoke)r-   r0   r1   r2   zutf-8zContent-Typezapplication/json)Úcredentialsr]   r4   r   r   r=   r6   Ú )Úcomplete_input_dictr3   r=   )Úinputr6   Úadditional_args)r   r   r   r   )Ú*_get_boto_credentials_from_optional_paramsÚget_bedrock_invoke_providerÚget_bedrock_model_idÚget_runtime_endpointr\   r]   Ú_get_request_bodyÚjsonÚdumpsÚencodeÚget_request_headersr^   Úpre_callr=   r   )rN   r-   r0   r1   r2   r3   r4   r5   r6   Úboto3_credentials_infoÚbedrock_providerÚmodelIdÚ_Úproxy_endpoint_urlr   r   r=   r   s                     r%   rD   z!BedrockImageEdit._prepare_request®   sm  € ð6 )-×(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à×1Ñ1Ø.×:Ñ:Ø2×BÑBØ'Ø+ØØØð 2ó 
ˆð 	×ÑØØà'+Ø.Ø"Ÿ?™?ñð 	ô 	
ô /Ø+ØØØô	
ð 	
r$   c                óŒ   — | j                  |¬«      } |«       }|j                  |||r|d   nd|i i ¬«      \  }}t        |«      S )zï
        Get the request body for the Bedrock Image Edit API

        Checks the model/provider and transforms the request body accordingly

        Returns:
            dict: The request body to use for the Bedrock Image Edit API
        ©r-   r   N)r-   r1   r0   Ú"image_edit_optional_request_paramsÚlitellm_paramsr=   )r.   Útransform_image_edit_requestr   )	rN   r-   r0   r1   r2   Úconfig_classÚconfig_instanceÚrequest_bodyrp   s	            r%   rg   z"BedrockImageEdit._get_request_body  s_   € ð #×3Ñ3¸%Ð3Ó@ˆÙ!-£ˆØ)×FÑFØØÙ#�%˜’(¨Ø/>ØØð Gó 
‰ˆ�aô �LÓ!Ð!r$   c                ó   — |�!|j                  |d|j                  d|i¬«       t        j                  d|j                  «       |j	                  «       }|€t        d«      ‚| j                  |¬«      } |«       }	|	j                  |||¬«      }|S )zR
        Transforms the Image Edit response from Bedrock to OpenAI format
        r_   r`   )ra   r6   Úoriginal_responserb   zraw model_response: %sz)Error in response object format, got Noners   )r-   Úraw_responser5   )Ú	post_callrK   r   Údebugrh   r+   r.   Útransform_image_edit_response)
rN   r9   r-   r5   r1   rC   r   Úresponse_dictrw   rx   s
             r%   rM   z<BedrockImageEdit._transform_response_dict_to_openai_response  s§   € ð Ð"Ø×!Ñ!ØØØ"*§-¡-Ø!6¸Ð =ð	 "ô ô 	×ÑÐ5°x·}±}ÔEØ'Ÿ}™}›ˆØÐ ÜÐHÓIÐIà"×3Ñ3¸%Ð3Ó@ˆÙ!-£ˆà(×FÑFØØ!Ø#ð Gó 
ˆð Ðr$   )r-   ú
str | None)FNNNN)r-   r   r0   Úlistr1   r�   r9   r   r2   r   r5   ÚLitellmLoggingr8   úfloat | httpx.Timeout | NonerO   Úboolr3   r�   r4   údict | Noner:   z%HTTPHandler | AsyncHTTPHandler | Noner6   r�   )N)r7   r   r8   r„   r-   r   r5   rƒ   r1   r�   r9   r   r:   zAsyncHTTPHandler | NoneÚreturnr   )r-   r   r0   r‚   r1   r�   r2   r   r3   r�   r4   r†   r5   rƒ   r6   r�   r‡   r   )
r-   r   r0   r‚   r1   r�   r2   r   r‡   r   )r9   r   r-   r   r5   rƒ   r1   r�   rC   zhttpx.Responser   r   r‡   r   )r   r   r    r!   Úclassmethodr.   rR   rE   rD   rg   rM   r#   r$   r%   r'   r'   4   sç  „ ñð ò	
ó ð	
ð( "Ø#Ø%)Ø8<Ø"ð=àð=ð ð=ð ð	=ð
 &ð=ð ð=ð $ð=ð .ð=ð ð=ð ð=ð #ð=ð 6ð=ð ó=ðN +/ð(à9ð(ð .ð(ð ð	(ð
 $ð(ð ð(ð &ð(ð (ð(ð 
ó(ðTQ
àðQ
ð ðQ
ð ð	Q
ð
 ðQ
ð ðQ
ð #ðQ
ð $ðQ
ð ðQ
ð 
)óQ
ðf"àð"ð ð"ð ð	"ð
 ð"ð 
ó"ð6#à%ð#ð ð#ð $ð	#ð
 ð#ð !ð#ð ð#ð 
ô#r$   r'   )$r!   Ú
__future__r   rh   Útypingr   r   r   rI   Úpydanticr   rV   Úlitellm._loggingr   Ú*litellm.litellm_core_utils.litellm_loggingr	   rƒ   ÚLlitellm.llms.bedrock.image_edit.amazon_nova_canvas_image_edit_transformationr
   Ú8litellm.llms.bedrock.image_edit.stability_transformationr   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   r   Úlitellm.types.utilsr   Úbase_aws_llmr   Úcommon_utilsr   Úbotocore.awsrequestr   r   r'   r#   r$   r%   ú<module>r•      sl   ðñõ #ã ß ,Ñ ,ã Ý ã Ý +Ý Põõ÷ó õ .å %Ý 'áÞ6àÐô iô ôK�zõ Kr$   