o
    :/i	                     @   s   d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
mZ d dlZedZeG dd de
e ZG d	d
 d
ee
e ZdS )    )ABCabstractmethod)	dataclassfield)Path)AnyGenericTypeVarN_Tc                   @   sh   e Zd ZU dZeed< eddZeed< de	j
fddZd	d
 Zdeeef fddZdefddZdS )MediaWithBytesa  
    Wrapper that couples a media object with its original encoded bytes.

    This ensures the raw bytes and media object remain synchronized,
    preventing cache corruption from in-place modifications.

    The wrapper delegates attribute access to the underlying media object,
    making it behave transparently like the wrapped type (e.g., PIL.Image).

    NOTE: Currently, this wrapper is used only for the image modality.
    mediaF)reproriginal_bytesreturnc                 O   s   t j| jg|R i |S )z2Allow np.array(obj) to return np.array(obj.media).)nparrayr   )selfargskwargs r   g/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/vllm/multimodal/media/base.py	__array__   s   zMediaWithBytes.__array__c                 C   s
   | j  S N)__dict__copy)r   r   r   r   __getstate__#   s   
zMediaWithBytes.__getstate__statec                 C   s   | j | d S r   )r   update)r   r   r   r   r   __setstate__&   s   zMediaWithBytes.__setstate__namec                 C   s   t | j|S )z9Delegate attribute access to the underlying media object.)getattrr   )r   r   r   r   r   __getattr__)   s   zMediaWithBytes.__getattr__N)__name__
__module____qualname____doc__r
   __annotations__r   r   bytesr   ndarrayr   r   dictstrr   r   r!   r   r   r   r   r      s   
 r   c                	   @   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ddZe	de
defd	d
Ze	dededefddZe	dedefddZdS )MediaIOzConfiguration 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_kwargsr   c                 C   s   t |pi }|r|| |S )zMerge config-level kwargs and request-level kwargs.

        By default this performs a shallow merge where runtime kwargs override
        keys in default kwargs. Subclasses may override to apply modality-
        specific behavior.
        )r)   r   )clsr,   r-   mergedr   r   r   merge_kwargs4   s   
zMediaIO.merge_kwargsdatac                 C      t r   NotImplementedError)r   r1   r   r   r   
load_bytesE      zMediaIO.load_bytes
media_typec                 C   r2   )zm
        List of media types:
        https://www.iana.org/assignments/media-types/media-types.xhtml
        r3   )r   r7   r1   r   r   r   load_base64I   s   zMediaIO.load_base64filepathc                 C   r2   r   r3   )r   r9   r   r   r   	load_fileQ   r6   zMediaIO.load_file)r"   r#   r$   r%   classmethodr)   r*   r   r0   r   r'   r
   r5   r8   r   r:   r   r   r   r   r+   .   s     
r+   )abcr   r   dataclassesr   r   pathlibr   typingr   r   r	   numpyr   r
   r   r+   r   r   r   r   <module>   s   