Ë
    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
Z
d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ ddl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ÚImageEditRequestParams)Ú	FileTypes)ÚGenericLiteLLMParams)ÚImageResponseé   )ÚOpenAIError)ÚLoggingc                   ó  — e Zd ZdZdedefd„Zdededede	fd„Z
deeeef      d	ed
edd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ej&                  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efd„Zy)ÚOpenAIImageEditConfigzz
    Base configuration for OpenAI image edit API.
    Used for models like gpt-image-1 that support multiple images.
    ÚmodelÚreturnc                 ó
   — g d¢S )z=
        All OpenAI Image Edits params are supported
        )ÚimageÚpromptÚ
backgroundÚinput_fidelityÚmaskr   ÚnÚqualityÚresponse_formatÚsizeÚuserÚextra_headersÚextra_queryÚ
extra_bodyÚtimeout© )Úselfr   s     úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai/image_edit/transformation.pyÚget_supported_openai_paramsz1OpenAIImageEditConfig.get_supported_openai_params#   s   € ò
ð 	
ó    Úimage_edit_optional_paramsÚdrop_paramsc                 ó   — t        |«      S )z:No mapping applied since inputs are in OpenAI spec already)Údict)r(   r,   r   r-   s       r)   Úmap_openai_paramsz'OpenAIImageEditConfig.map_openai_params9   s   € ô Ð.Ó/Ð/r+   Ú
files_listr   Ú
field_nameNc                 ó¼   — t        j                  |«      }t        |t        «      r!|j	                  ||j
                  ||ff«       y|j	                  |d||ff«       y)z<Add an image to the files list with appropriate content typez	image.pngN)r	   Úget_image_content_typeÚ
isinstancer   ÚappendÚname)r(   r1   r   r2   Úimage_content_types        r)   Ú_add_image_to_filesz)OpenAIImageEditConfig._add_image_to_filesB   sZ   € ô %:×$PÑ$PÐQVÓ$WÐä�eœ^Ô,Ø×Ñ˜z¨E¯J©J¸Ð?QÐ+RÐSÕTà×Ñ˜z¨K¸Ð@RÐ+SÐTÕUr+   r   Ú"image_edit_optional_request_paramsÚlitellm_paramsÚheadersc                 ón  — d|i|¥}|�||d<   |�||d<   t        di |¤Ž}t        t        |«      }	|	j                  d«      }
|	j                  d«      }|	j	                  «       D ��ci c]  \  }}|dvsŒ||“Œ }}}g }|
�3t        |
t        «      s|
gn|
}|D ]  }|€Œ| j                  ||d¬«       Œ |�zt        |t        «      r	|r|d	   nd}|�_t        j                  |«      }t        |t        «      r$|j                  d|j                  ||ff«       ||fS |j                  dd
||ff«       ||fS c c}}w )zË
        Transform image edit request to OpenAI API format.

        Handles multipart/form-data for images. Uses "image[]" field name
        to support multiple images (e.g., for gpt-image-1).
        r   Nr   r   r   )r   r   zimage[])r1   r   r2   r   zmask.pngr'   )r   r   r/   ÚgetÚitemsr5   Úlistr9   r	   r4   r   r6   r7   )r(   r   r   r   r:   r;   r<   Úrequest_paramsÚrequestÚrequest_dictÚ_image_listÚ_maskÚkÚvÚdata_without_filesr1   Ú
image_listÚ_imageÚmask_content_types                      r)   Útransform_image_edit_requestz2OpenAIImageEditConfig.transform_image_edit_requestP   sŽ  € ð" �Uð!
à0ð!
ˆð ÐØ&+ˆN˜7Ñ#ØÐØ'-ˆN˜8Ñ$ä/ÑA°.ÑAˆÜ"¤4¨Ó1ˆð
 *×-Ñ-¨gÓ6ˆØ× Ñ  Ó(ˆØ6B×6HÑ6HÓ6J×$i©d¨a°ÈaÐWhÒNh Q¨¡TÐ$iÐÑ$iØ35ˆ
ð Ð"Ü5?ÀÌTÔ5R ¡ÐXcˆJà$ò �ØÑ%Ø×,Ñ,Ø#-Ø$Ø#,ð -õ ðð Ðä˜%¤Ô&Ù$)˜˜aš¨t�àÐ Ü0E×0\Ñ0\Ð]bÓ0cÐ!Ü˜e¤^Ô4Ø×%Ñ% v°·
±
¸EÐCTÐ/UÐ&VÔWð " :Ð-Ð-ð ×%Ñ% v°
¸EÐCTÐ/UÐ&VÔWà! :Ð-Ð-ùó7 %js   Á%D1Á2D1Úraw_responseÚlogging_objc                 ó–   — 	 |j                  «       }t        di |¤ŽS # t        $ r" t        |j                  |j                  ¬«      ‚w xY w)z=No transform applied since outputs are in OpenAI spec already)ÚmessageÚstatus_coder'   )ÚjsonÚ	Exceptionr   ÚtextrQ   r   )r(   r   rM   rN   Úraw_response_jsons        r)   Útransform_image_edit_responsez3OpenAIImageEditConfig.transform_image_edit_responseŽ   sT   € ð	_Ø'3×'8Ñ'8Ó':Ðô Ñ1Ð0Ñ1Ð1øô ò 	_Ü l×&7Ñ&7À\×E]ÑE]Ô^Ð^ð	_ús	   ‚ �+AÚapi_keyÚapi_basec                 ó˜   — |xs/ t         j                  xs t         j                  xs t        d«      }|j	                  dd|› �i«       |S )NÚOPENAI_API_KEYÚAuthorizationzBearer )ÚlitellmrW   Ú
openai_keyr   Úupdate)r(   r<   r   rW   r;   rX   s         r)   Úvalidate_environmentz*OpenAIImageEditConfig.validate_environment›   sL   € ð ÒfœWŸ_™_Òf´×0BÑ0BÒfÄnÐUeÓFfˆØ�‰à 7¨7¨)Ð!4ðô	
ð
 ˆr+   c                 ó’   — |xs. t         j                  xs t        d«      xs t        d«      xs d}|j                  d«      }|› d�S )z;
        Get the endpoint for OpenAI responses API
        ÚOPENAI_BASE_URLÚOPENAI_API_BASEzhttps://api.openai.com/v1ú/z/images/edits)r\   rX   r   Úrstrip)r(   r   rX   r;   s       r)   Úget_complete_urlz&OpenAIImageEditConfig.get_complete_url«   s_   € ð ò +Ü×Ñò+äÐ/Ó0ò+ô Ð/Ó0ò+ð +ð 	ð —?‘? 3Ó'ˆà�˜=Ð)Ð)r+   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr@   r*   r   Úboolr/   r0   Útupler   r9   r   r   r   rL   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rV   r_   re   r'   r+   r)   r   r      s“  „ ñð

°ð 
¸ó 
ð,0à$Bð0ð ð0ð ð	0ð
 
ó0ðVà˜˜s C˜x™Ñ)ðVð ðVð ð	Vð
 
óVð<.àð<.ð �d‘
ð<.ð ˜4Ñð	<.ð
 -1ð<.ð -ð<.ð ð<.ð 
ˆt�\Ð!Ñ	"ó<.ð|2àð2ð —n‘nð2ð 'ð	2ð
 
ó2ð" #Ø&*Ø#ñàðð ðð �t‘ð	ð
 ˜t™ðð ˜‘*ðð 
óð *àð*ð ˜‘*ð*ð ð	*ð
 
ô*r+   r   )!Úior   Útypingr   r   r   r   rm   Úhttpx._typesr   r\   Úlitellm.images.utilsr	   Ú/litellm.llms.base_llm.image_edit.transformationr
   Úlitellm.secret_managers.mainr   Úlitellm.types.images.mainr   r   Úlitellm.types.llms.openair   Úlitellm.types.routerr   Úlitellm.utilsr   Úcommon_utilsr   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjro   r   r'   r+   r)   ú<module>r}      sT   ðÝ ß 2Ó 2ã Ý %ã Ý 6Ý OÝ 7÷õ 0Ý 5Ý 'å &áÝXà*ÑàÐôb*Ð/õ b*r+   