
    AHj                          d dl mZmZ d dlmZmZ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mZ d dlmZ  G d d	      Zy)
    )BufferedReaderBytesIO)AnyDictListOptionalcastget_type_hintsN)get_image_type)BaseImageEditConfig)FILE_MIME_TYPESFileType)ImageEditOptionalRequestParamsc                       e Zd Ze	 	 ddedededee   dee	e      de
fd       Zed	e
eef   defd
       Zededefd       Zy)ImageEditRequestUtilsNmodelimage_edit_provider_configimage_edit_optional_paramsdrop_paramsadditional_drop_paramsreturnc           	         |j                  |       }t        j                  du xs |du }t        |      }|r|D ]  }|j	                  |d        |D cg c]	  }||vs| }	}|	rH|r|	D ]  }|j	                  |d        n,t        j
                  | d|  ddj                  |	             |j                  t        t        |      | |      }
|
S c c}w )a"  
        Get optional parameters for the image edit API.

        Args:
            model: The model name
            image_edit_provider_config: The provider configuration for image edit API
            image_edit_optional_params: The optional parameters for the image edit API
            drop_params: If True, silently drop unsupported parameters instead of raising
            additional_drop_params: List of additional parameter names to drop

        Returns:
            A dictionary of supported parameters for the image edit API
        TNz5The following parameters are not supported for model z: z, )r   message)r   r   r   )
get_supported_openai_paramslitellmr   dictpopUnsupportedParamsErrorjoinmap_openai_paramsr	   r   )r   r   r   r   r   supported_paramsshould_dropfiltered_optional_paramsparamunsupported_paramsmapped_paramss              L/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/images/utils.pyget_optional_params_image_editz4ImageEditRequestUtils.get_optional_params_image_edit   s   * 6QQRWX))T1H[D5H#'(B#C !/ :(,,UD9:  8
5HX;XE
 
 / >E,00=> 44STYSZZ\]a]f]fgy]z\{| 
 3DD'+.0H( # E 
 -
s   	CCparamsc                     t        t              j                         }| j                         D ci c]  \  }}||v s||| }}}t	        t        |      S c c}}w )a  
        Filter parameters to only include those defined in ImageEditOptionalRequestParams.

        Args:
            params: Dictionary of parameters to filter

        Returns:
            ImageEditOptionalRequestParams instance with only the valid parameters
        )r
   r   keysitemsr	   )r)   
valid_keyskvfiltered_paramss        r'   'get_requested_image_edit_optional_paramz=ImageEditRequestUtils.get_requested_image_edit_optional_paramB   s_     $$BCHHJ
#\\^
QqJ1=AqD
 
 2ODD
s   AAA
image_datac                    	 t        | t              rD| j                         }| j                  d       | j	                  d      }| j                  |       nt        | t
              rD| j                         }| j                  d       | j	                  d      }| j                  |       nt        | t              r| dd }nt        | d      r_ t        | dd              }t        | d      r| j                  d       | j	                  d      }t        | d      r)| j                  |       nt        t        j                     S t        |      }|t        t        j                     S t        j                  t        j                  t        j                  t        j                  t        j                   d}|j#                  |      }|t        t        j                     S t        |   S # t$        $ r t        t        j                     cY S w xY w)	a  
        Detect the content type of image data using existing LiteLLM utils.

        Args:
            image_data: Can be BytesIO, bytes, BufferedReader, or other file-like objects

        Returns:
            The MIME type string (e.g., "image/png", "image/jpeg")
        r   d   Nreadtellc                       y)Nr    r8       r'   <lambda>z>ImageEditRequestUtils.get_image_content_type.<locals>.<lambda>w   s    r9   seek)pngjpeggifwebpheic)
isinstancer   r6   r;   r5   r   byteshasattrgetattrr   r   PNGr   JPEGGIFWEBPHEICget	Exception)r2   current_pos
bytes_dataimage_type_strtype_mapping	file_types         r'   get_image_content_typez,ImageEditRequestUtils.get_image_content_typeU   s   7	1*g.(oo/"'__
 ,J7(oo/"'__S1
,J.'-
 :v."H'*fi"H"JKz62"*!+!5Jz62"4*8<<88 ,J7N%&x||44  || ||  L %((8I &x||44"9-- 	1"8<<00	1s%   D?G' #G' &A7G' G' ' H
	H
)NN)__name__
__module____qualname__staticmethodstrr   r   r   boolr   r   r(   r   r1   rQ   r8   r9   r'   r   r      s    
 '+6:33$73 %C3 d^	3
 !)c 33 
3 3j ES#XE	'E E$ A13 A13 A1 A1r9   r   )ior   r   typingr   r   r   r   r	   r
   r   (litellm.litellm_core_utils.token_counterr   /litellm.llms.base_llm.image_edit.transformationr   litellm.types.filesr   r   litellm.types.images.mainr   r   r8   r9   r'   <module>r^      s)    & B B  C O 9 DL1 L1r9   