Ë
    uPêj)  ã                   óÒ   — d dl m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­ d dlmZ d dlmZmZmZ er	d dlmZ eZneZ G d„ de«      Zy)é    )ÚBufferedReader)ÚTYPE_CHECKINGÚAnyÚFinalÚcastN)ÚRequestFiles)ÚImageEditRequestUtils)ÚBaseImageEditConfig)Úget_secret_str)ÚImageEditOptionalRequestParams)ÚRecraftImageEditRequestParams)Ú*)ÚGenericLiteLLMParams)Ú	FileTypesÚImageObjectÚImageResponse)ÚLoggingc                   óD  — e Zd ZU dZeed<   dZeed<   dZeed<   dede	fd	„Z
d
edededefd„Zdededz  dedefd„Z	 	 	 ddedededz  dedz  dedz  defd„Zdededz  dedz  dedededeeef   fd„Zdedz  de	eeef      fd„Zdedej2                  dedefd„Zy)ÚRecraftImageEditConfigzhttps://external.api.recraft.aiÚDEFAULT_BASE_URLzv1/images/imageToImageÚIMAGE_EDIT_ENDPOINTgš™™™™™É?ÚDEFAULT_STRENGTHÚmodelÚreturnc                 ó
   — g d¢S )zª
        Supported OpenAI parameters that can be mapped to Recraft image edit API.

        Based on Recraft API docs: https://www.recraft.ai/docs#image-to-image
        )ÚnÚresponse_formatÚstyle© )Úselfr   s     ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/recraft/image_edit/transformation.pyÚget_supported_openai_paramsz2RecraftImageEditConfig.get_supported_openai_params   s   € ò
ð 	
ó    Úimage_edit_optional_paramsÚdrop_paramsc                 óš   — t        |«      }| j                  |«      }|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}|S c c}}w )z‹
        Map OpenAI image edit parameters to Recraft parameters.
        Reuses OpenAI logic but filters to supported params only.
        )Údictr"   Úitems)	r    r$   r   r%   Ú
all_paramsÚsupported_paramsÚkÚvÚfiltered_paramss	            r!   Úmap_openai_paramsz(RecraftImageEditConfig.map_openai_params)   sZ   € ô !Ð!;Ó<ˆ
ð #'×"BÑ"BÀ5Ó"IÐØ3=×3CÑ3CÓ3E×!_©4¨1¨aÈÐN^ÒI^ ! Q¡$Ð!_ˆÑ!_àÐùó "`s
   °A½AÚapi_baseNÚlitellm_paramsc                 ó„   — |xs t        d«      xs | j                  }|j                  d«      }|› d| j                  › �}|S )zi
        Get the complete url for the request

        Some providers need `model` in `api_base`
        ÚRECRAFT_API_BASEú/)r   r   Úrstripr   )r    r   r/   r0   Úcomplete_urls        r!   Úget_complete_urlz'RecraftImageEditConfig.get_complete_url<   sL   € ð %Òc¬Ð7IÓ(JÒcÈd×NcÑNcˆà#×*Ñ*¨3Ó/ˆØ&˜ q¨×)AÑ)AÐ(BÐCˆØÐr#   ÚheadersÚapi_keyc                 óN   — |xs t        d«      }|st        d«      ‚d|› �|d<   |S )NÚRECRAFT_API_KEYzRECRAFT_API_KEY is not setzBearer ÚAuthorization)r   Ú
ValueError)r    r7   r   r8   r0   r/   Úfinal_api_keys          r!   Úvalidate_environmentz+RecraftImageEditConfig.validate_environmentM   s9   € ð ,3Ò+W´nÐEVÓ6WˆÙÜÐ9Ó:Ð:à%,¨]¨OÐ#<ˆ�Ñ Øˆr#   ÚpromptÚimageÚ"image_edit_optional_request_paramsc                 ó  — ||j                  d| j                  «      dœ|¥}|�||d<   t        di |¤Ž}t        t        |«      }	|�| j                  |¬«      ng }
|	j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ }}}||
fS c c}}w )zÚ
        Transform the image edit request to Recraft's multipart form format.
        Reuses OpenAI file handling logic but adapts for Recraft API structure.

        https://www.recraft.ai/docs#image-to-image
        Ústrength)r   rC   r?   )r@   r@   r   )Úpopr   r   r   r'   Ú_get_image_files_for_requestr(   )r    r   r?   r@   rA   r0   r7   Úrequest_paramsÚrequest_bodyÚrequest_dictÚ
files_listr+   r,   Údata_without_imagess                 r!   Útransform_image_edit_requestz3RecraftImageEditConfig.transform_image_edit_request\   sµ   € ð" Ø:×>Ñ>¸zÈ4×K`ÑK`Óañ!
ð 1ð!
ˆð
 ÐØ'-ˆN˜8Ñ$ä;ÑM¸nÑMˆÜ"¤4¨Ó6ˆð OTÐN_˜D×=Ñ=ÀEÐ=ÔJÐegˆ
Ø7C×7IÑ7IÓ7K×%\©t¨q°!ÈqÐT[Ë| a¨¡dÐ%\ÐÑ%\à" JÐ.Ð.ùó &]s   Á-BÁ;Bc                 ó  — g }|r{t        |t        «      r
|r|d   nd }n|}|�]t        j                  |«      }t        |t        «      r"|j                  d|j                  ||ff«       |S |j                  dd||ff«       |S )Nr   r@   z	image.png)Ú
isinstanceÚlistr	   Úget_image_content_typer   ÚappendÚname)r    r@   rI   Ú_imageÚimage_content_types        r!   rE   z3RecraftImageEditConfig._get_image_files_for_request~   s–   € ð 46ˆ
ñ ä˜%¤Ô&Ù%*˜˜qš°‘à�àÐ!Ü1F×1]Ñ1]Ð^dÓ1eÐ"Ü˜f¤nÔ5Ø×%Ñ% w°·±¸fÐFXÐ0YÐ&ZÔ[ð Ðð ×%Ñ% w°¸fÐFXÐ0YÐ&ZÔ[àÐr#   Úraw_responseÚlogging_objc           
      óz  — t        «       }	 |j                  «       }|j                  sg |_        |d   D ]H  }|j                  j                  t        |j                  dd «      |j                  dd «      ¬«      «       ŒJ |S # t        $ r0}| j                  d|› �|j                  |j
                  ¬«      ‚d }~ww xY w)Nz(Error transforming image edit response: )Úerror_messageÚstatus_coder7   ÚdataÚurlÚb64_json)rZ   r[   )
r   ÚjsonÚ	ExceptionÚget_error_classrX   r7   rY   rP   r   Úget)r    r   rT   rU   Úmodel_responseÚresponse_dataÚeÚ
image_datas           r!   Útransform_image_edit_responsez4RecraftImageEditConfig.transform_image_edit_response•   sË   € ô !.£ˆð	Ø#/×#4Ñ#4Ó#6ˆMð ×"Ò"Ø"$ˆNÔà'¨Ñ/ò 	ˆJØ×Ñ×&Ñ&ÜØ"Ÿ™ u¨dÓ3Ø'Ÿ^™^¨J¸Ó=ôõð	ð Ðøô# ò 	Ø×&Ñ&Ø HÈÈÐLØ(×4Ñ4Ø$×,Ñ,ð 'ó ð ûð	ús   ŒB Â	B:Â
+B5Â5B:)NNN)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__r   r   ÚfloatrN   r"   r   Úboolr'   r.   r6   r>   r   r   Útupler   rK   r   rE   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rd   r   r#   r!   r   r      s›  … Ø=Ð�cÓ=Ø7Ð˜Ó7Ø!Ð�eÓ!ð

°ð 

¸ó 

ðà$Bðð ðð ð	ð
 
óð&àðð ˜‘*ðð ð	ð
 
óð* #Ø&*Ø#ñàðð ðð �t‘ð	ð
 ˜t™ðð ˜‘*ðð 
óð /àð /ð �d‘
ð /ð ˜4Ñð	 /ð
 -1ð /ð -ð /ð ð /ð 
ˆt�\Ð!Ñ	"ó /ðDà˜4Ñðð 
ˆe�C˜�H‰oÑ	óð.àðð —n‘nðð 'ð	ð
 
ôr#   r   ) Úior   Útypingr   r   r   r   rm   Úhttpx._typesr   Úlitellm.images.utilsr	   Ú/litellm.llms.base_llm.image_edit.transformationr
   Úlitellm.secret_managers.mainr   Úlitellm.types.images.mainr   Úlitellm.types.llms.recraftr   Úlitellm.types.responses.mainÚlitellm.types.routerr   Úlitellm.types.utilsr   r   r   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjro   r   r   r#   r!   ú<module>r}      sP   ðÝ ß 2Ó 2ã Ý %å 6Ý OÝ 7Ý DÝ DÜ *Ý 5ß EÑ EáÝXà*ÑàÐôWÐ0õ Wr#   