o
    پi                     @   sf   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 G dd de	Z
G d	d
 d
Ze
egZdS )zInference-only Mistral model.    )ListN)Mistral3MultiModalProjector)MultimodalDataItem)LlamaForCausalLMc                   @   s   e Zd ZdS )MistralForCausalLMN)__name__
__module____qualname__ r
   r
   M/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/mistral.pyr      s    r   c                   @   sH   e Zd ZeZdd Zdee dej	fddZ
dd Zd	d
 Zdd ZdS ) Mistral3ForConditionalGenerationc                 K   sH   ddl m} d|d j_|di || _| |d | j_| j| j_d S )Nr   )LlavaForConditionalGenerationFconfigr
   )sglang.srt.models.llavar   vision_configpad_image_borderinnerMULTIMODAL_PROJECTOR_TYPEmulti_modal_projectorget_image_feature)selfkwargsr   r
   r
   r   __init__    s   z)Mistral3ForConditionalGeneration.__init__itemsreturnc           	      C   s   g }|D ]C}|j |j}}| j||dd}|j| j }| jdv r+|ddddf }n| jdkr3|}ntd| j || |	d| qt
j|dd	}|S )
a&  Extract features from image inputs.

        Args:
            items: List of MultimodalDataItem objects containing image data
                Note that an item can be either "image" or "multi-images"

        Returns:
            torch.Tensor: features from image inputs, concatenated
        T)output_hidden_states)defaultpatchN   fullzUnexpected select feature: r   )dim)featureimage_sizesvision_towerhidden_statesvision_feature_layervision_feature_select_strategy
ValueErrorappendr   squeezetorchcat)	r   r   featuresitempixel_valuesr"   image_outputsselected_image_featureretr
   r
   r   r   .   s.   




z2Mistral3ForConditionalGeneration.get_image_featurec                 C      t | j|S N)getattrr   r   namer
   r
   r   __getattr__S      z,Mistral3ForConditionalGeneration.__getattr__c                 C   r2   r3   )hasattrr   r5   r
   r
   r   __hasattr__V   r8   z,Mistral3ForConditionalGeneration.__hasattr__c                 O   s   | j |i |S r3   )r   )r   argsr   r
   r
   r   __call__Y   s   z)Mistral3ForConditionalGeneration.__call__N)r   r   r	   r   r   r   r   r   r*   Tensorr   r7   r:   r<   r
   r
   r
   r   r      s    %r   )__doc__typingr   r*   .transformers.models.mistral3.modeling_mistral3r   "sglang.srt.managers.schedule_batchr   sglang.srt.models.llamar   r   r   
EntryClassr
   r
   r
   r   <module>   s   @