o
    -i                     @   s   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 deej ZG dd deej ZdS )    )BytesIO)PathN)Image)init_logger   )convert_image_modergba_to_rgb   )MediaIOMediaWithBytesc                       s   e Zd Zddeddf fddZdejeej B dejfdd	Zd
edeej fddZ	ded
edeej fddZ
dedeej fddZdddejdedB defddZ  ZS )ImageMediaIORGB
image_modereturnNc                    sn   t    || _|| _|dd}t|trt|}t|tr.t|dkr.t	dd |D s2t
d|| _d S )Nrgba_background_color)   r   r      c                 s   s2    | ]}t |tod |  kodkn  V  qdS )r   r   N)
isinstanceint).0c r   X/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/multimodal/media/image.py	<genexpr>*   s   0 z(ImageMediaIO.__init__.<locals>.<genexpr>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__r   r   r      s   


zImageMediaIO.__init__imagec                 C   sL   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'   r   r   r   _convert_image_mode2   s   
z ImageMediaIO._convert_image_modedatac                 C   s   t t|}t| ||S N)r   openr   r   r+   )r#   r,   r'   r   r   r   
load_bytes?   s   zImageMediaIO.load_bytes
media_typec                 C      |  tj|ddS NT)validater/   pybase64	b64decoder#   r0   r,   r   r   r   load_base64C      zImageMediaIO.load_base64filepathc                 C   sP   t |d}| }W d    n1 sw   Y  t t|}t| ||S )Nrb)r.   readr   r   r   r+   )r#   r:   fr,   r'   r   r   r   	load_fileF   s
   
zImageMediaIO.load_file)image_formatr)   r?   c                C   sn   |d u rt d d}|}t }| |}||| | }W d    n1 s*w   Y  t|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getvaluer5   	b64encodedecode)r#   r)   r?   r'   bufferr,   r   r   r   encode_base64L   s   

zImageMediaIO.encode_base64)r   )__name__
__module____qualname__strr   r   r   r+   bytesr/   r8   r   r>   rI   __classcell__r   r   r%   r   r      s$    

r   c                       sr   e Zd Zd fddZdedejfddZdededejfd	d
Z	de
dejfddZdejdefddZ  ZS )ImageEmbeddingMediaIOr   Nc                    s   t    d S r-   )r   r   )r#   r%   r   r   r   f   s   zImageEmbeddingMediaIO.__init__r,   c                 C   sL   t |}tj  tj|dd}| W  d    S 1 sw   Y  d S NT)weights_only)r   torchsparsecheck_sparse_tensor_invariantsloadto_dense)r#   r,   rH   tensorr   r   r   r/   i   s
   $z ImageEmbeddingMediaIO.load_bytesr0   c                 C   r1   r2   r4   r7   r   r   r   r8   q   r9   z!ImageEmbeddingMediaIO.load_base64r:   c                 C   sD   t j  t j|dd}| W  d    S 1 sw   Y  d S rQ   )rS   rT   rU   rV   rW   )r#   r:   rX   r   r   r   r>   t   s   $zImageEmbeddingMediaIO.load_filer)   c                 C   s   t | dS )NrA   )r5   rF   numpyrG   )r#   r)   r   r   r   rI   {   r9   z#ImageEmbeddingMediaIO.encode_base64)r   N)rJ   rK   rL   r   rN   rS   Tensorr/   rM   r8   r   r>   rI   rO   r   r   r%   r   rP   e   s    rP   )ior   pathlibr   r5   rS   PILr   vllm.loggerr   r'   r   r   baser
   r   __file__rB   r   rZ   rP   r   r   r   r   <module>   s   R