Ë
    uPêjÿ  ã                   óè   — d dl Z d dlmZ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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 er	d dl m!Z" e"Z#neZ# G d„ de«      Z$y)é    N)ÚBufferedReaderÚBytesIO)ÚTYPE_CHECKINGÚAnyÚFinalÚcast)ÚRequestFiles)ÚImageEditRequestUtils)ÚBaseImageEditConfig)Ú"get_gemini_image_generation_configÚ!map_openai_image_params_to_gemini)Útransform_gemini_image_usage)Úget_secret_str)ÚImageEditOptionalRequestParams)ÚGenericLiteLLMParams)Ú	FileTypesÚImageObjectÚImageResponseÚOpenAIImage)ÚLoggingc                   óŒ  — e Zd ZU dZeed<   g d¢Zee   ed<   dedee   fd„Zde	ded	e
deeef   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
fd„Zdededz  dedefd„Zdededz  dedz  deeef   dededeeeef   edz  f   fd„Zdedej.                  dedefd„Zdeee   z  deeeef      fd„Zdedefd„Zy)ÚGeminiImageEditConfigz0https://generativelanguage.googleapis.com/v1betaÚDEFAULT_BASE_URL)ÚnÚsizeÚimageConfigÚSUPPORTED_PARAMSÚmodelÚreturnc                 ó,   — t        | j                  «      S )N)Úlistr   )Úselfr   s     úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/gemini/image_edit/transformation.pyÚget_supported_openai_paramsz1GeminiImageEditConfig.get_supported_openai_params'   s   € Ü�D×)Ñ)Ó*Ð*ó    Úimage_edit_optional_paramsÚdrop_paramsc                 ó>   — t        ||| j                  |«      d¬«      S )NT)Úparamsr   Úsupported_paramsÚparse_image_config_string)r   r$   )r"   r&   r   r'   s       r#   Úmap_openai_paramsz'GeminiImageEditConfig.map_openai_params*   s(   € ô 1Ø-ØØ!×=Ñ=¸eÓDØ&*ô	
ð 	
r%   NÚheadersÚapi_keyÚlitellm_paramsÚapi_basec                 óR   — |xs t        d«      }|st        d«      ‚||d<   d|d<   |S )NÚGEMINI_API_KEYzGEMINI_API_KEY is not setzx-goog-api-keyzapplication/jsonzContent-Type)r   Ú
ValueError)r"   r-   r   r.   r/   r0   Úfinal_api_keys          r#   Úvalidate_environmentz*GeminiImageEditConfig.validate_environment7   s=   € ð ,3Ò+V´nÐEUÓ6VˆÙÜÐ8Ó9Ð9à$1ˆÐ Ñ!Ø"4ˆ�ÑØˆr%   c                  ó   — y)z3Gemini uses JSON requests, not multipart/form-data.F© )r"   s    r#   Úuse_multipart_form_dataz-GeminiImageEditConfig.use_multipart_form_dataG   s   € àr%   c                 ón   — |xs t        d«      xs | j                  }|j                  d«      }|› d|› d�S )NÚGEMINI_API_BASEú/z/models/z:generateContent)r   r   Úrstrip)r"   r   r0   r/   Úbase_urls        r#   Úget_complete_urlz&GeminiImageEditConfig.get_complete_urlK   sA   € ð ÒYœ~Ð.?Ó@ÒYÀD×DYÑDYˆØ—?‘? 3Ó'ˆØ�˜8 E 7Ð*:Ð;Ð;r%   ÚpromptÚimageÚ"image_edit_optional_request_paramsc                 óô   — |r| j                  |«      ng }|st        d«      ‚|j                  «       }|�|dk7  r|j                  d|i«       d|ig}	d|	i}
t	        ||¬«      |
d<   t        t        g «      }|
|fS )Nz.Gemini image edit requires at least one image.Ú ÚtextÚpartsÚcontents)r   Úoptional_paramsÚgenerationConfig)Ú_prepare_inline_image_partsr3   ÚcopyÚappendr   r   r	   )r"   r   r?   r@   rA   r/   r-   Úinline_partsrE   rF   Úrequest_bodyÚempty_filess               r#   Útransform_image_edit_requestz2GeminiImageEditConfig.transform_image_edit_requestU   s¥   € ñ JO˜d×>Ñ>¸uÔEÐTVˆÙÜÐMÓNÐNð $×(Ñ(Ó*ˆØÐ &¨B¢,Ø�L‰L˜& &Ð)Ô*ð ˜ðð
ˆð 0:¸8Ð.Dˆä+MØØ>ô,
ˆÐ'Ñ(ô
 "¤,°Ó3ˆØ˜[Ð(Ð(r%   Úraw_responseÚlogging_objc                 ó0  — t        «       }	 |j                  «       }|j                  dg «      }g }|D ]r  }	|	j                  di «      }
|
j                  dg «      }|D ]G  }|j                  d«      }|sŒ|j                  d«      sŒ)|j                  t        |d   d ¬«      «       ŒI Œt t        t        t           |«      |_        d	|v rt        |d	   «      |_        |S # t        $ r0}| j                  d|› �|j                  |j
                  ¬«      ‚d }~ww xY w)
Nz(Error transforming image edit response: )Úerror_messageÚstatus_coder-   Ú
candidatesÚcontentrE   Ú
inlineDataÚdata)Úb64_jsonÚurlÚusageMetadata)r   ÚjsonÚ	ExceptionÚget_error_classrT   r-   ÚgetrK   r   r   r!   r   rX   r   Úusage)r"   r   rP   rQ   Úmodel_responseÚresponse_jsonÚexcrU   Ú	data_listÚ	candidaterV   rE   ÚpartÚinline_datas                 r#   Útransform_image_edit_responsez3GeminiImageEditConfig.transform_image_edit_responsew   s.  € ô !.£ˆð	Ø#/×#4Ñ#4Ó#6ˆMð *×-Ñ-¨l¸BÓ?ˆ
Ø.0ˆ	à#ò 	ˆIØ—m‘m I¨rÓ2ˆGØ—K‘K ¨Ó,ˆEØò �Ø"Ÿh™h |Ó4�Ú ;§?¡?°6Õ#:Ø×$Ñ$Ü#Ø%0°Ñ%8Ø $ôõñð	ô #¤4¬Ñ#4°iÓ@ˆÔØ˜mÑ+Ü#?ÀÈoÑ@^Ó#_ˆNÔ ØÐøô5 ò 	Ø×&Ñ&Ø HÈÈÐNØ(×4Ñ4Ø$×,Ñ,ð 'ó ð ûð	ús   ŒC Ã	DÃ%+DÄDc                 ó  — t        |t        «      r|}n|g}g }|D ]c  }|€Œt        j                  |«      }| j	                  |«      }|j                  d|t        j                  |«      j                  d«      dœi«       Œe |S )NrW   zutf-8)ÚmimeTyperX   )	Ú
isinstancer!   r
   Úget_image_content_typeÚ_read_all_bytesrK   Úbase64Ú	b64encodeÚdecode)r"   r@   ÚimagesrL   ÚimgÚ	mime_typeÚimage_bytess          r#   rI   z1GeminiImageEditConfig._prepare_inline_image_partsœ   s“   € ä�eœTÔ"Ø‰Fà�WˆFà46ˆØò 	ˆCØˆ{Øä-×DÑDÀSÓIˆIØ×.Ñ.¨sÓ3ˆKØ×Ñà Ø$-Ü &× 0Ñ 0°Ó =× DÑ DÀWÓ Mñ#ðõð	ð Ðr%   c                 óŒ  — t        |t        «      r|S t        |t        «      rD|j                  «       }|j	                  d«       |j                  «       }|j	                  |«       |S t        |t        «      rD|j                  «       }|j	                  d«       |j                  «       }|j	                  |«       |S t        d«      ‚)Nr   z-Unsupported image type for Gemini image edit.)rk   Úbytesr   ÚtellÚseekÚreadr   r3   )r"   r@   Úcurrent_posrX   s       r#   rm   z%GeminiImageEditConfig._read_all_bytesµ   s•   € Ü�eœUÔ#ØˆLÜ�eœWÔ%ØŸ*™*›,ˆKØ�J‰J�qŒMØ—:‘:“<ˆDØ�J‰J�{Ô#ØˆKÜ�eœ^Ô,ØŸ*™*›,ˆKØ�J‰J�qŒMØ—:‘:“<ˆDØ�J‰J�{Ô#ØˆKÜÐHÓIÐIr%   )NNN)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__r   r!   r$   r   ÚboolÚdictr   r,   r5   r8   r>   r   r   Útupler	   rO   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rh   rI   rv   rm   r7   r%   r#   r   r   #   sÞ  … ØNÐ�cÓNÚ">Ð�d˜3‘iÓ>ð+°ð +¸¸c¹ó +ð
à$Bð
ð ð
ð ð	
ð
 
ˆc�3ˆh‰ó
ð" #Ø&*Ø#ñàðð ðð �t‘ð	ð
 ˜t™ðð ˜‘*ðð 
óð ¨ó ð<àð<ð ˜‘*ð<ð ð	<ð
 
ó<ð )àð )ð �d‘
ð )ð ˜4Ñð	 )ð
 -1°°c°©Nð )ð -ð )ð ð )ð 
ˆt�C˜�H‰~˜|¨dÑ2Ð2Ñ	3ó )ðD#àð#ð —n‘nð#ð 'ð	#ð
 
ó#ðJ°¸TÀ)¹_Ñ1Lð ÐQUÐVZÐ[^Ð`cÐ[cÑVdÑQeó ð2J Yð J°5ô Jr%   r   )%rn   Úior   r   Útypingr   r   r   r   rƒ   Úhttpx._typesr	   Úlitellm.images.utilsr
   Ú/litellm.llms.base_llm.image_edit.transformationr   Ú litellm.llms.gemini.common_utilsr   r   Ú.litellm.llms.gemini.image_usage_transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.images.mainr   Úlitellm.types.routerr   Úlitellm.types.utilsr   r   r   r   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjr…   r   r7   r%   r#   ú<module>r“      sa   ðÛ ß &ß 2Ó 2ã Ý %å 6Ý O÷õõ 8Ý DÝ 5÷ó ñ ÝXà*ÑàÐôaJÐ/õ aJr%   