o
    )ie;                     @   sf  U d dl Z d dl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
mZmZ d dlZd dlZd dlZd dl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mZmZmZmZmZmZm Z m!Z! d d
l"m#Z# ee$Z%dZ&dZ'dZ(ede dediZ)e*e+e e,f e-d< ee.e/e0ej1f Z2dd Z3de
dee4e,e,f  fddZ5G dd dZ6G dd dZ7dS )    N)Sequence)isclass)FunctionType)AnyOptionalUnion)msgpack)envs)init_logger)	BaseMultiModalFieldMultiModalBatchedFieldMultiModalFieldConfigMultiModalFieldElemMultiModalFlatFieldMultiModalKwargsMultiModalKwargsItemMultiModalSharedFieldNestedTensors)UtilityResult         flatZsharedZbatchedMMF_CLASS_TO_FACTORYc                   C   s   t d d S )NzWAllowing insecure serialization using pickle due to VLLM_ALLOW_INSECURE_SERIALIZATION=1)loggerZwarning_once r   r   `/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/v1/serial_utils.py#_log_insecure_serialization_warning/   s   r   valreturnc                 C   s    | d u rd S t | }|j|jfS N)type
__module____qualname__)r   tr   r   r   _typestr4   s   r%   c                	   @   s  e Zd ZdZd dee fddZdedee	 fdd	Z
ded
edee	 fddZdedefddZdejdeeeedf eeef f fddZdejdeeeedf eeef f fddZdedeeeef  fddZdedeeef fddZdedefddZde fddZ!dS )!MsgpackEncodera]  Encoder with custom torch tensor and numpy array serialization.

    Note that unlike vanilla `msgspec` Encoders, this interface is generally
    not thread-safe when encoding tensors / numpy arrays.

    By default, arrays below 256B are serialized inline Larger will get sent 
    via dedicated messages. Note that this is a per-tensor limit.
    Nsize_thresholdc                 C   s>   |d u rt j}tj| jd| _d | _|| _t jrt	  d S d S )N)enc_hook)
r	   Z VLLM_MSGPACK_ZERO_COPY_THRESHOLDr   ZEncoderr(   encoderaux_buffersr'   !VLLM_ALLOW_INSECURE_SERIALIZATIONr   )selfr'   r   r   r   __init__E   s   
zMsgpackEncoder.__init__objr   c                 C   s2   zdg | _ }| j||d< |W d | _ S d | _ w )N    r   )r*   r)   encode)r,   r.   bufsr   r   r   r0   Q   s
   zMsgpackEncoder.encodebufc                 C   s2   z|g| _ | j }| j|| |W d | _ S d | _ w r    )r*   r)   encode_into)r,   r.   r2   r1   r   r   r   r3   ]   s   zMsgpackEncoder.encode_intoc                    s,  t |tjr |S t |tjr|jjdvr |S t |t	r0t
dd |j|j|jfD S t |tr: |S t |trK fdd|j D S t |tro|j}tjsZd |fS t|turft||fS dd |D |fS tjs|tdt| dt |trttt |S tt!t"j |t"j#d	S )
N)OVc                 s   s$    | ]}|d urt |nd V  qd S r    )int.0vr   r   r   	<genexpr>p   s
    
z*MsgpackEncoder.enc_hook.<locals>.<genexpr>c                    s    g | ]}|D ]}  |qqS r   )_encode_mm_item)r8   Zitemlistitemr,   r   r   
<listcomp>x   s    z+MsgpackEncoder.enc_hook.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )r%   r7   r   r   r   r>      s    zObject of type zl is not serializableSet VLLM_ALLOW_INSECURE_SERIALIZATION=1 to allow fallback to pickle-based serialization.)protocol)$
isinstancetorchTensor_encode_tensornpndarraydtypekind_encode_ndarrayslicetuplestartstopstepr   r;   r   Z_items_by_modalityvaluesr   resultr	   r+   r!   listr%   	TypeErrorr   r   ExtCUSTOM_TYPE_CLOUDPICKLEcloudpickledumpsCUSTOM_TYPE_PICKLEpickleHIGHEST_PROTOCOL)r,   r.   rO   r   r=   r   r(   f   s@   









zMsgpackEncoder.enc_hook.c                 C   sj   | j d usJ |jjr|jn| }|jr|j| jk r"t	t
|}nt| j }| j | |jj|j|fS r    )r*   flagsc_contiguousdatatobytesshapenbytesr'   r   rR   CUSTOM_TYPE_RAW_VIEWlenappendrF   str)r,   r.   Zarr_datar[   r   r   r   rH      s   
zMsgpackEncoder._encode_ndarrayc                 C   sv   | j d usJ |  tj }|j| jk r!t	
t|j}nt| j }| j |j t|jd}||j|fS )Nztorch.)r*   flatten
contiguousviewrA   uint8numpyr^   r'   r   rR   r_   r[   r`   ra   rb   rF   removeprefixr]   )r,   r.   arrr[   rF   r   r   r   rC      s   
zMsgpackEncoder._encode_tensorr<   c                    s    fdd|  D S )Nc                       g | ]}  |qS r   )_encode_mm_field_elem)r8   elemr=   r   r   r>          z2MsgpackEncoder._encode_mm_item.<locals>.<listcomp>)rN   )r,   r<   r   r=   r   r;      s   zMsgpackEncoder._encode_mm_itemrl   c                 C   s0   |j |j|jd u rd n| |j| |jdS )N)modalitykeyr[   field)rn   ro   r[   _encode_nested_tensors_encode_mm_fieldrp   )r,   rl   r   r   r   rk      s   

z$MsgpackEncoder._encode_mm_field_elemntc                    s:   t |tjr |S t |ttfr|S  fdd|D S )Nc                    rj   r   )rq   r8   xr=   r   r   r>      rm   z9MsgpackEncoder._encode_nested_tensors.<locals>.<listcomp>)r@   rA   rB   rC   r6   float)r,   rs   r   r=   r   rq      s
   
z%MsgpackEncoder._encode_nested_tensorsrp   c                    sD   t  j}|std j  fddt D }|g|R S )NzUnsupported field type: c                 3   s    | ]	}t  |jV  qd S r    )getattrname)r8   frp   r   r   r:      s    z2MsgpackEncoder._encode_mm_field.<locals>.<genexpr>)r   get	__class__rQ   dataclassesfields)r,   rp   rx   Zfield_valuesr   rz   r   rr      s   
zMsgpackEncoder._encode_mm_fieldr    )"__name__r"   r#   __doc__r   r6   r-   r   r   bytestrr0   	bytearrayr3   r(   rD   rE   rJ   rb   r   
memoryviewrH   rA   rB   rC   r   rP   dictr;   r   rk   r   rq   r   rr   r   r   r   r   r&   ;   s8    		0




	r&   c                   @   s0  e Zd ZdZd&dee fddZdeee	e f defdd	Z
ded
edefddZd
edefddZde	e dedefddZdedejfddZdedejfddZd
ee dee fddZd
ee defddZd
eeef defddZd
edefddZd
edefd d!Z d"e!d#e"defd$d%Z#dS )'MsgpackDecoderzDecoder with custom torch tensor and numpy array serialization.

    Note that unlike vanilla `msgspec` Decoders, this interface is generally
    not thread-safe when encoding tensors / numpy arrays.
    Nr$   c                 C   sD   |d u rdn|f}t j|| j| jd| _d| _tjr t  d S d S )Nr   )ext_hookdec_hook)	r   ZDecoderr   r   decoderr*   r	   r+   r   )r,   r$   argsr   r   r   r-      s   

zMsgpackDecoder.__init__r1   r   c                 C   sH   t |ttttjfr| j|S || _z| j|d W d| _S d| _w )Nr   r   )	r@   bytesr   r   zmqFramer   decoder*   )r,   r1   r   r   r   r      s   zMsgpackDecoder.decoder.   c                 C   s   t |rAt|tjr| |S t|tjr| |S |tu r"t| S t|t	r,| 
|S t|tr8t| |S |tu rA| |S |S r    )r   
issubclassrD   rE   _decode_ndarrayrA   rB   _decode_tensorrI   r   _decode_mm_itemr   _decode_mm_itemsr   _decode_utility_result)r,   r$   r.   r   r   r   r      s   





zMsgpackDecoder.dec_hookc                    s   |\}}|d ur@t jstdt|tsJ t|dkr-t|d tr- ||}t	|S t|ts4J  fddt||D }t	|S )NzPVLLM_ALLOW_INSECURE_SERIALIZATION must be set to use custom utility result typesr   r   c                    s   g | ]
\}}  ||qS r   )_convert_result)r8   rtrr=   r   r   r>     s    
z9MsgpackDecoder._decode_utility_result.<locals>.<listcomp>)
r	   r+   rQ   r@   rP   r`   rb   r   zipr   )r,   r.   result_typerO   r   r=   r   r     s   
z%MsgpackDecoder._decode_utility_resultr   rO   c                 C   s:   |d u r|S |\}}t |}t||}tj||| jdS )N)r   )	importlibimport_modulerw   msgspecconvertr   )r,   r   rO   mod_namerx   modr   r   r   r     s   

zMsgpackDecoder._convert_resultri   c                 C   s6   |\}}}t |tr| j| n|}tj||d|S )NrF   )r@   r6   r*   rD   
frombufferZreshape)r,   ri   rF   r]   r[   bufferr   r   r   r   &  s   
zMsgpackDecoder._decode_ndarrayc                 C   s~   |\}}}t |tr| j| nt|}tt|}t |tjs J |s/d|v s(J tj||dS tj|tj	d}|
|
|S )Nr   r   )r@   r6   r*   r   rw   rA   rF   emptyr   rf   re   )r,   ri   rF   r]   r[   r   Ztorch_dtyper   r   r   r   -  s   

zMsgpackDecoder._decode_tensorc                    s    fdd|D S )Nc                    rj   r   )r   r7   r=   r   r   r>   ?  rm   z3MsgpackDecoder._decode_mm_items.<locals>.<listcomp>r   r,   r.   r   r=   r   r   >  s   zMsgpackDecoder._decode_mm_itemsc                    s   t  fdd|D S )Nc                    rj   r   )_decode_mm_field_elemr7   r=   r   r   r>   C  rm   z2MsgpackDecoder._decode_mm_item.<locals>.<listcomp>)r   Z
from_elemsr   r   r=   r   r   A  s   zMsgpackDecoder._decode_mm_itemc                 C   sr   |d d ur|  |d |d< |d ^}}tt|}|dkr'| |d |d< |d g|R  j|d< tdi |S )Nr[   rp   r   r   r   )_decode_nested_tensorsrw   r   _decode_nested_slicesrp   r   )r,   r.   Zfactory_meth_nameZ
field_argsZfactory_methr   r   r   r   E  s   
z$MsgpackDecoder._decode_mm_field_elemc                    s\   t |ttfr	|S t |tstdt| |r%t |d tr% |S  fdd|D S )Nz#Unexpected NestedTensors contents: r   c                    rj   r   )r   rt   r=   r   r   r>   _  rm   z9MsgpackDecoder._decode_nested_tensors.<locals>.<listcomp>)r@   r6   rv   rP   rQ   r!   rb   r   r   r   r=   r   r   V  s   

z%MsgpackDecoder._decode_nested_tensorsc                    sB   t |ttfs	J |rt |d ttfst| S  fdd|D S )Nr   c                    rj   r   )r   rt   r=   r   r   r>   e  rm   z8MsgpackDecoder._decode_nested_slices.<locals>.<listcomp>)r@   rP   rJ   rI   r   r   r=   r   r   a  s   z$MsgpackDecoder._decode_nested_slicescoder[   c                 C   sF   |t kr|S tjr|tkrt|S |tkrt|S td| d)NzExtension type code z is not supported)	r_   r	   r+   rV   rW   loadsrS   rT   NotImplementedError)r,   r   r[   r   r   r   r   g  s   


zMsgpackDecoder.ext_hookr    )$r   r"   r#   r   r   r   r-   r   r   r   r   r!   r   r   r   rb   r   rD   rE   r   rA   rB   r   rP   r   r   r   r   r   r   r   r   r   r6   r   r   r   r   r   r   r      s&    	
r   )8r}   r   rW   collections.abcr   inspectr   typesr   typingr   r   r   rT   r   rg   rD   rA   r   r   Zvllmr	   Zvllm.loggerr
   Zvllm.multimodal.inputsr   r   r   r   r   r   r   r   r   Zvllm.v1.enginer   r   r   rV   rS   r_   r   r   r!   rb   __annotations__r   r   r   r   r   r   rJ   r%   r&   r   r   r   r   r   <module>   s>   
, &