o
    :/i                  	   @   s   d dl Z d dlmZ d dlm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 d	d
lmZ d	dlmZ G dd deee
jeeef f  ZdS )    N)partial)Path)Any)Image)envs   )VIDEO_LOADER_REGISTRY   )MediaIO)ImageMediaIOc                
       s   e Zd ZdZedeeef dB deeef dB deeef f fddZ	dd	e	d
e
ddf fddZdedeejeeef f fddZdededeejeeef f fddZdedeejeeef f fddZdddejdedefddZ  ZS )VideoMediaIOzConfiguration values can be user-provided either by --media-io-kwargs or
    by the runtime API field "media_io_kwargs". Ensure proper validation and
    error handling.
    default_kwargsNruntime_kwargsreturnc                    sR   t  ||}|r'd|v rd|vr|dd  |S d|v r'd|vr'|dd  |S )N
num_framesfps)supermerge_kwargspop)clsr   r   merged	__class__ h/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/vllm/multimodal/media/video.pyr      s   zVideoMediaIO.merge_kwargs    image_ior   c                    s>   t    || _|| _|dd ptj}|| _t	|| _
d S )Nvideo_backend)r   __init__r   r   r   r   VLLM_VIDEO_LOADER_BACKENDkwargsr   loadvideo_loader)selfr   r   r    video_loader_backendr   r   r   r   *   s   
zVideoMediaIO.__init__datac                 C   s   | j j|fd| ji| jS )Nr   )r"   
load_bytesr   r    )r#   r%   r   r   r   r&   E   s   zVideoMediaIO.load_bytes
media_typec                    sL   |  dkrt| jjd t fdd|dD i fS | t	|S )Nz
video/jpegz
image/jpegc                    s   g | ]	}t  |qS r   )npasarray).0
frame_data
load_framer   r   
<listcomp>T   s    z,VideoMediaIO.load_base64.<locals>.<listcomp>,)
lowerr   r   load_base64r(   stacksplitr&   base64	b64decode)r#   r'   r%   r   r,   r   r1   J   s   zVideoMediaIO.load_base64filepathc                 C   s<   | d}| }W d    n1 sw   Y  | |S )Nrb)openreadr&   )r#   r6   fr%   r   r   r   	load_fileY   s   

zVideoMediaIO.load_fileJPEG)video_formatmediar=   c                   s@   |}|dkrt | jj|d d fdd|D S d}t|)Nr<   )image_formatr/   c                 3   s    | ]
} t |V  qd S )N)r   	fromarray)r*   frameencode_framer   r   	<genexpr>m   s    z-VideoMediaIO.encode_base64.<locals>.<genexpr>z&Only JPEG format is supported for now.)r   r   encode_base64joinNotImplementedError)r#   r>   r=   videomsgr   rB   r   rE   _   s   zVideoMediaIO.encode_base64)r   )__name__
__module____qualname____doc__classmethoddictstrr   r   r   intr   bytestuplenptNDArrayr&   r1   r   r;   rE   __classcell__r   r   r   r   r      sF    
$
$
r   )r4   	functoolsr   pathlibr   typingr   numpyr(   numpy.typingrT   PILr   vllmr   rH   r   baser
   imager   rS   rU   rO   rP   r   r   r   r   r   <module>   s   *