o
    پi                     @   sl   d dl Z d dlmZmZmZ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 G dd deZdS )	    N)DictListTupleUnion)MultimodalDataItem)KimiK25ForConditionalGeneration)BaseMultimodalProcessor)MultimodalSpecialTokensc                       sd   e Zd ZegZ fddZdeeee	e
f  fddZ	ddedeee ejef fd	d
Z  ZS )KimiK2_5VLImageProcessorc                    s@   t  j|||g|R i | td|jtdd|| _d S )Nz<|media_pad|>z(?:<\|media_pad\|>)+)image_tokenimage_token_idimage_token_regex)super__init__r	   media_placeholder_token_idrecompilebuild	mm_tokens)self	hf_configserver_args
_processorargskwargs	__class__ ]/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/multimodal/processors/kimi_k25.pyr      s   z!KimiK2_5VLImageProcessor.__init__
image_datac                    sB   | j ||| jd}|j}| || j\}}	}
|	 || jjdS )N)promptr   multimodal_tokens)	input_idsmm_itemsim_token_id)load_mm_datar   
input_textprocess_and_combine_mm_datatolistr   )r   r   r&   request_objr   r   base_outputr    r#   r"   _r   r   r   process_mm_data_async   s   
z.KimiK2_5VLImageProcessor.process_mm_data_asyncNr&   returnc                 K   s   | | jj}|d g}t||dd D ]\}}	| jjd|d}
|| jj|
 |	  qd|}|rQg }|D ]
}|d|d q:ddd }|||< d}| j	d
||||d|}|d	 
 }| |}|||fS )z
        Helper method to process multimodal data and create mm_items in one step.

        Returns:
            Tuple of (created mm_items, input_ids)
        r      Nimage)typer/    _medias)r&   imagesaudiosvideosr"   r   )splitr   r   zipr   media_processormedia_tokens_calculatorappendjoinprocess_mm_dataflatten&collect_mm_items_from_processor_output)r   r&   r3   r4   r5   r   partsresultr/   part
num_tokensmediumskeyretr"   collected_itemsr   r   r   _process_and_collect_mm_items6   s.   




z6KimiK2_5VLImageProcessor._process_and_collect_mm_items)NNN)__name__
__module____qualname__r   modelsr   r   r   strbytesr   r,   r   r   torchTensordictrG   __classcell__r   r   r   r   r
      s    	
r
   )r   typingr   r   r   r   rN   "sglang.srt.managers.schedule_batchr   sglang.srt.models.kimi_k25r   /sglang.srt.multimodal.processors.base_processorr   SGLangBaseProcessorr	   r
   r   r   r   r   <module>   s    