
    .`i                         d dl mZ d dlmZ d dl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mZ  e	e          Z G d
 deej                           Z G d deej                           ZdS )    )BytesIO)PathN)Image)init_logger   )convert_image_modergba_to_rgb   )MediaIOMediaWithBytesc                   
    e Zd Zddeddf fdZdej        eej                 z  dej        fdZdedeej                 fd	Z	d
ededeej                 fdZ
dedeej                 fdZdddej        dedz  defdZ xZS )ImageMediaIORGB
image_modereturnNc                    t                                                       || _        || _        |                    dd          }t          |t                    rt          |          }t          |t                    r,t          |          dk    rt          d |D                       st          d          || _        d S )Nrgba_background_color)   r   r      c              3   `   K   | ])}t          |t                    od |cxk    odk    nc V  *dS )r   r   N)
isinstanceint).0cs     o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/multimodal/media/image.py	<genexpr>z(ImageMediaIO.__init__.<locals>.<genexpr>*   sE      JJQJq#&&81====S====JJJJJJ    zRrgba_background_color must be a list or tuple of 3 integers in the range [0, 255].)super__init__r   kwargsgetr   listtuplelenall
ValueErrorr   )selfr   r    rgba_bg	__class__s       r   r   zImageMediaIO.__init__   s    $  **4oFFgt$$ 	%GnnG w&&	G!!JJ'JJJJJ " )   &-"""r   imagec                     t          |t                    r|j        }|j        | j        k    r|S |j        dk    r | j        dk    rt          || j                  S t          || j                  S )z0Convert image mode with custom background color.RGBAr   )r   r   mediamoder   r	   r   r   )r'   r*   s     r   _convert_image_modez ImageMediaIO._convert_image_mode2   so     e^,, 	 KE:((LZ6!!do&>&>ud&@AAA%eT_===r   datac                     t          j        t          |                    }t          |                     |          |          S N)r   openr   r   r/   )r'   r0   r*   s      r   
load_byteszImageMediaIO.load_bytes?   s5    
74==))d66u==tDDDr   
media_typec                 T    |                      t          j        |d                    S NT)validater4   pybase64	b64decoder'   r5   r0   s      r   load_base64zImageMediaIO.load_base64C   $    x1$FFFGGGr   filepathc                    t          |d          5 }|                                }d d d            n# 1 swxY w Y   t          j         t          |                    }t	          |                     |          |          S )Nrb)r3   readr   r   r   r/   )r'   r?   fr0   r*   s        r   	load_filezImageMediaIO.load_fileF   s    (D!! 	Q6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
74==))d66u==tDDDs   266)image_formatr-   rE   c                Z   |t                               d           d}|}t                      5 }|                     |          }|                    ||           |                                }d d d            n# 1 swxY w Y   t          j        |                              d          S )NzThe default format of `ImageMediaIO.encode_base64` will be changed from "JPEG" to "PNG" in v0.15 to avoid lossy compression. To continue using the old default, pass `format="JPEG"` explicitly to silence this warning.JPEGutf-8)	loggerwarning_oncer   r/   savegetvaluer:   	b64encodedecode)r'   r-   rE   r*   bufferr0   s         r   encode_base64zImageMediaIO.encode_base64L   s     K   "LYY 	%&,,U33EJJv|,,,??$$D	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%
 !$''..w777s   A A;;A?A?)r   )__name__
__module____qualname__strr   r   r   r/   bytesr4   r=   r   rD   rP   __classcell__r)   s   @r   r   r      s^       - -3 -T - - - - - -<>[>%+#>>>	> > > >Eu E)D E E E EHc H H9T H H H HE$ E>%++F E E E E $(	8 8 8{8 Dj	8
 
8 8 8 8 8 8 8 8r   r   c                        e Zd Zd fdZdedej        fdZdededej        fdZ	de
dej        fd	Zd
ej        defdZ xZS )ImageEmbeddingMediaIOr   Nc                 H    t                                                       d S r2   )r   r   )r'   r)   s    r   r   zImageEmbeddingMediaIO.__init__f   s    r   r0   c                     t          |          }t          j                                        5  t          j        |d          }|                                cd d d            S # 1 swxY w Y   d S NT)weights_only)r   torchsparsecheck_sparse_tensor_invariantsloadto_dense)r'   r0   rO   tensors       r   r4   z ImageEmbeddingMediaIO.load_bytesi   s     \88:: 	% 	%ZT:::F??$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   *A%%A),A)r5   c                 T    |                      t          j        |d                    S r7   r9   r<   s      r   r=   z!ImageEmbeddingMediaIO.load_base64q   r>   r   r?   c                     t           j                                        5  t          j        |d          }|                                cd d d            S # 1 swxY w Y   d S r\   )r^   r_   r`   ra   rb   )r'   r?   rc   s      r   rD   zImageEmbeddingMediaIO.load_filet   s     \88:: 	% 	%Zt<<<F??$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   *AAAr-   c                 t    t          j        |                                                              d          S )NrH   )r:   rM   numpyrN   )r'   r-   s     r   rP   z#ImageEmbeddingMediaIO.encode_base64{   s)    !%++--0077@@@r   )r   N)rQ   rR   rS   r   rU   r^   Tensorr4   rT   r=   r   rD   rP   rV   rW   s   @r   rY   rY   e   s             %u % % % % %Hc H H H H H H%$ %5< % % % %A5< AC A A A A A A A Ar   rY   )ior   pathlibr   r:   r^   PILr   vllm.loggerr   r*   r   r	   baser   r   __file__rI   r   rh   rY    r   r   <module>rp      s                       # # # # # # 3 3 3 3 3 3 3 3 ) ) ) ) ) ) ) )	X		O8 O8 O8 O8 O875;' O8 O8 O8dA A A A AGEL1 A A A A Ar   