o
    :/i &                     @   s  d dl mZ d dlmZ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mZ d dlmZmZmZ d d	lmZmZ d d
lmZmZmZ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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ee0Z1G dd dZ2dS )    )Mapping)Anyoverload)assert_never)
VllmConfig)build_enc_dec_inputs)init_logger)MULTIMODAL_REGISTRYMultiModalRegistry)MultiModalDataDictMultiModalInputsMultiModalUUIDDict)BaseRendererrenderer_from_config)DecoderDictPromptDecoderOnlyDictPromptEncoderDecoderDictPromptEncoderDictPromptSingletonDictPrompt)parse_dec_only_promptparse_enc_dec_prompt)TokenizerLike   )DecoderInputsDecoderOnlyInputsEmbedsInputsEmbedsPromptEncoderDecoderInputsEncoderInputsProcessorInputs
PromptTypeSingletonInputs
TextPromptTokenInputsTokensPrompttoken_inputsc                       s  e Zd ZdefdededB deddf fddZede	dB fdd	Z
de	fd
dZ	d+dedeeef dB dee fddZ		d,dddeee B dedeeef dB deeef dB dedB defddZdedefddZ	d+dee deeef dB dee fddZ	d+dedeeef dB deeB fddZ	d+dedeeef dB deeB fddZ e!	d+de"deeef dB de#fd d!Z$e!	d+de%deeef dB de&fd"d!Z$e!	d+de'deeef dB de(fd#d!Z$	d+de)deeef dB de*fd$d!Z$	d+de+deeef dB de,fd%d&Z-	d+de'deeef dB de(fd'd(Z.	d+de/deeef dB de0fd)d*Z1  Z2S )-InputPreprocessorNvllm_configrenderermm_registryreturnc                    s*   t    |j| _|pt|| _|| _d S N)super__init__model_configr   r(   r)   )selfr'   r(   r)   	__class__ c/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/vllm/inputs/preprocess.pyr-   1   s   

zInputPreprocessor.__init__c                 C   s   | j jS r+   )r(   	tokenizerr/   r2   r2   r3   r4   =   s   zInputPreprocessor.tokenizerc                 C   s
   | j  S r+   )r(   get_tokenizerr5   r2   r2   r3   r6   A   s   
zInputPreprocessor.get_tokenizerprompttokenization_kwargsc                 C   s6   | j }|jjdi |pi }|t|d|}|d S )zn
        Apply the model's tokenizer to a text prompt, returning the
        corresponding token IDs.
        )r7   prompt_token_idsNr2   )r(   default_cmpl_tok_paramswith_kwargs_tokenize_singleton_promptr"   )r/   r7   r8   r(   
tok_params
tok_promptr2   r2   r3   _tokenize_promptD   s   	
z"InputPreprocessor._tokenize_prompt)mm_uuidsmm_datamm_processor_kwargsr@   c                C   s   | j j|||||dS )z
        Apply the model's multi-modal processor to a multi-modal prompt,
        returning the corresponding token IDs and metadata.
        )r@   rB   r8   )r(   _process_multimodal)r/   r7   rA   rB   r8   r@   r2   r2   r3   rC   Z   s   z%InputPreprocessor._process_multimodalparsed_contentc                 C   s   | j |S r+   )r(   _process_embeds)r/   rD   r2   r2   r3   rE   o   s   z!InputPreprocessor._process_embedsinputsc                 C   s6   | j }|jjdi |pi }|t|d|}|d S )N)r9   r9   r2   )r(   r:   r;   r<   r$   )r/   rF   r8   r(   r=   r>   r2   r2   r3   _truncate_inputsu   s   
z"InputPreprocessor._truncate_inputsc                 C   sx   |  |d |}|d }r | j|||d||dd}nt|}|d }r/||d< |d }r:||d< |S )Nr9   multi_modal_datarB   multi_modal_uuids)r8   r@   r7   
cache_salt)rG   getrC   r%   )r/   rD   r8   r9   rH   rF   prompt_textrJ   r2   r2   r3   _process_tokens   s"   z!InputPreprocessor._process_tokensc                 C   sl   |d }| d }r| j||| dpi |d}n| j||d}t|}||d< | d }r4||d< |S )Nr7   rH   rB   r8   rJ   )rK   rC   r?   r%   )r/   rD   r8   rL   rH   rF   r9   rJ   r2   r2   r3   _process_text   s"   zInputPreprocessor._process_textc                 C      d S r+   r2   r/   r7   r8   r2   r2   r3   _prompt_to_llm_inputs      z'InputPreprocessor._prompt_to_llm_inputsc                 C   rP   r+   r2   rQ   r2   r2   r3   rR      rS   c                 C   rP   r+   r2   rQ   r2   r2   r3   rR      rS   c                 C   sF   d|v r	|  |S d|v r| |S d|v r| j||dS t| dS )z
        Extract the singleton inputs from a prompt.

        Arguments:

        * prompt: single encoder or decoder input prompt

        Returns:

        * [`SingletonInputs`][vllm.inputs.data.SingletonInputs] instance
        prompt_embedsr9   r7   rN   N)rE   rM   rO   r   rQ   r2   r2   r3   rR      s   

c                 C   sD   |d }|d }t | j||d|du rdn| j||d| j dS )a[  
        For encoder/decoder models only:
        Process an input prompt into an
        [`EncoderDecoderInputs`][vllm.inputs.data.EncoderDecoderInputs]
        instance.

        Arguments:

        * prompt: an input prompt

        Returns:

        * [`EncoderDecoderInputs`][vllm.inputs.data.EncoderDecoderInputs]
          instance
        encoder_promptdecoder_promptrN   N)encoder_inputsdecoder_inputsdecoder_start_token_id)r   rR   r(   get_dec_start_token_id)r/   r7   r8   rU   rV   r2   r2   r3   _process_encoder_decoder_prompt   s   z1InputPreprocessor._process_encoder_decoder_promptc                 C   s   | j ||dS )a1  
        For decoder-only models:
        Process an input prompt into a
        [`DecoderOnlyInputs`][vllm.inputs.data.DecoderOnlyInputs] instance.

        Arguments:

        * prompt: input prompt

        Returns:

        * [`DecoderOnlyInputs`][vllm.inputs.data.DecoderOnlyInputs] instance
        rN   )rR   rQ   r2   r2   r3   _process_decoder_only_prompt  s   z.InputPreprocessor._process_decoder_only_promptc                 C   s*   | j jr| t||S | jt||dS )zPreprocess the input prompt.rN   )r.   is_encoder_decoderr[   r   r\   r   rQ   r2   r2   r3   
preprocess/  s   zInputPreprocessor.preprocessr+   )NN)3__name__
__module____qualname__r	   r   r   r
   r-   propertyr   r4   r6   strdictr   listintr?   r   r   objectr   r   rC   r   r   rE   rG   r$   r#   rM   r"   rO   r   r   r   rR   r   r   r   r   r   r!   r   r   r[   r\   r    r   r^   __classcell__r2   r2   r0   r3   r&   0   s    






	
!
*
r&   N)3collections.abcr   typingr   r   typing_extensionsr   vllm.configr   vllm.inputs.datar   vllm.loggerr   vllm.multimodalr	   r
   vllm.multimodal.inputsr   r   r   vllm.renderersr   r   vllm.renderers.inputsr   r   r   r   r    vllm.renderers.inputs.preprocessr   r   vllm.tokenizersr   datar   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r_   loggerr&   r2   r2   r2   r3   <module>   s   <