
    .`i,                         d dl Z d dlZd dlZd dlZd dlmZ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 ddlmZ  ee          Z e j        d          d	ed
eg df         fd            Z G d d          ZdS )    N)CallableIterable)Image)init_logger   )MediaWithBytes   )maxsize	algorithmreturnzhashlib._Hashc                     |                                  } | dk    rddlm} |S | dk    rt          j        S | dk    rt          j        S t          d|            )aP  
    Get the hasher factory based on the configured algorithm.

    Args:
        algorithm: Hash algorithm name (blake3, sha256, or sha512)

    Returns a callable that creates a new hasher instance.
    Supports blake3 (default), sha256, and sha512 for FIPS compliance.

    See: https://github.com/vllm-project/vllm/issues/18334
    blake3r   )r   sha256sha512zUnsupported hash algorithm: )lowerr   hashlibr   r   
ValueError)r   r   s     j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/multimodal/hasher.py_get_hasher_factoryr      st     !!IH!!!!!!	h		~	h		~ C	CCDDD    c            	           e Zd Zededeeez           fd            Zede	dedeeez           fd            Z
edede	fd            ZdS )	MultiModalHasherobjr   c                 Z   t          |t          t          f          r|fS t          |t                    r|                    d          fS t          |t
          t          f          r't          j        |          	                                fS t          |t          j
                  r|                                }t          j        j        j        |v rVt          |t          j        j        j                 t          j                  r"|t          j        j        j                 j        fS |j        t          j        |          d}|j        }||j        |d<   |j        
|j        |d<   |                     d|          S t          |t,                    rt          |j        t          j
                  r|j                                        }t          j        j        j        |v rVt          |t          j        j        j                 t          j                  r"|t          j        j        j                 j        fS |                     d|j                  S t          |t2          j                  r|                                }|j        }|j        }|t2          j        k    r|                                }|                     |!                                f                               t2          j"                  }|                     dt          |          tG          |          |$                                d          S |                     d|$                                          S t          |t          j%                  rm|j&        j'        r$|                     t          j"                  j(        n|	                                }|                     d|j        j        |j        |d	          S tR          *                    d
tW          |                     tY          j-        |          fS )Nutf-8)modedatapalettepalette_rawmodeimagetensor)original_dtypeoriginal_shaper   ndarray)dtypeshaper   z=No serialization method found for %s. Falling back to pickle.).
isinstancebytes
memoryviewstrencodeintfloatnparraytobytesr   getexifExifTagsBaseImageIDuuidUUIDr   asarrayr   rawmodeiter_item_to_bytesr   mediaoriginal_bytestorchTensorcpur%   r&   bfloat16
contiguousviewnumeluint8tuplenumpyr$   flagsc_contiguousr   loggerwarningtypepickledumps)	clsr   exifr   r   
tensor_objtensor_dtypetensor_shapearr_datas	            r   serialize_itemzMultiModalHasher.serialize_item3   s    cE:.// 	6Mc3 	*JJw''))cC<(( 	.HSMM))++--c5;'' 	9;;==D~"*d22zU^(01498 82 U^089?AAHbjoo>>DkG"")/Y?..5oD*+))'4888c>** 	Gz#)U[/Q/Q 	G9$$&&D~"*d22zU^(01498 82 U^089?AA))'33EFFFc5<(( 	H'*wwyyJ%+L%+L u~--'2244
'__j.>.>.@.@-BCCHHUU
--*-l*;*;*/*=*= * 0 0 2 2    ))(J4D4D4F4FGGGc2:&& 	 ,/9+AT""''s{{}}  )) Y] Y$    	KTRUYY	
 	
 	
 S!!##r   keyc              #     K   ||                     d          V  d S t          |t          t          f          r8t	          |          D ]&\  }}|                     | d| |          E d {V  'd S t          |t                    r=|                                D ]&\  }}|                     | d| |          E d {V  'd S |                     d          V  |                     |          E d {V  d S )Nr   .)	r+   r'   listrD   	enumerater9   dictitemsrS   )rM   rT   r   ielemkvs          r   r9   z#MultiModalHasher.iter_item_to_bytes}   sR      ;**W%%%%%FcD%=)) 	/$S>> F F411S,,1,,EEEEEEEEEEF FT"" 	/		 C C111S,,1,,BBBBBBBBBBC C **W%%%%%))#...........r   kwargsc                     t          t          j                  } |            }|                                D ]3\  }}|                     ||          D ]}|                    |           4|                                S )N)r   envsVLLM_MM_HASHER_ALGORITHMrZ   r9   update	hexdigest)rM   r_   hasher_factoryhasherr]   r^   bytes_s          r   hash_kwargszMultiModalHasher.hash_kwargs   s    ,T-JKK!!LLNN 	& 	&DAq00A66 & &f%%%%& !!!r   N)__name__
__module____qualname__classmethodobjectr   r(   r)   rS   r*   r9   rh    r   r   r   r   2   s        G$ G$HUZ5G,H G$ G$ G$ [G$R // / 
%*$	%	/ / / [/& "6 "c " " " [" " "r   r   )	functoolsr   rK   r5   collections.abcr   r   rE   r.   r<   PILr   	vllm.envsra   vllm.loggerr   r:   r   ri   rH   	lru_cacher*   r   r   rn   r   r   <module>ru      s=          . . . . . . . .                  # # # # # # ! ! ! ! ! !	X		 QE3 E8B4G+H E E E  E6h" h" h" h" h" h" h" h" h" h"r   