o
    پi                     @   s   d dl mZm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
 d dl	mZ d dlmZ G d	d
 d
ejeZG dd deeZdS )    )ABCabstractmethod)AnyN)nn)	DiTConfig)TeaCacheContext)TeaCacheMixin)AttentionBackendEnumc                       s  e Zd ZU g Zeed< g Zeed< eed< eed< eed< eed< eed< e	 j
Z
ee ed< d fddZde	deeef d	d
f fddZe	
	
ddejdejeej B dejdejeej B d
B d	ejf
ddZdddZed	ee fddZed	ejfddZ  ZS )BaseDiT_fsdp_shard_conditions_compile_conditionsparam_names_mappingreverse_param_names_mappinghidden_sizenum_attention_headsnum_channels_latents_supported_attention_backendsreturnNc                    s:   g d}t    |D ]}t| |std| dqd S )N)r   r   r   #Subclasses of BaseDiT must define 'z' class variable)super__init_subclass__hasattrAttributeError)clsrequired_class_attrsattr	__class__ b/home/ubuntu/.local/lib/python3.10/site-packages/sglang/multimodal_gen/runtime/models/dits/base.pyr   "   s   


zBaseDiT.__init_subclass__config	hf_configc                    s4   t    || _|| _| jstd| jj dd S )Nz	Subclass z* must define _supported_attention_backends)r   __init__r    r!   supported_attention_backends
ValueErrorr   __name__)selfr    r!   kwargsr   r   r   r"   /   s   
zBaseDiT.__init__hidden_statesencoder_hidden_statestimestepencoder_hidden_states_imagec                 K   s   d S Nr   )r&   r(   r)   r*   r+   guidancer'   r   r   r   forward8   s   
zBaseDiT.forwardc                 C   s0   g d}|D ]}t | |std| dqd S )N)r   r   r   r   z' instance variable)r   r   )r&   required_attrsr   r   r   r   __post_init__D   s   

zBaseDiT.__post_init__c                 C   s   | j S r,   )r   r&   r   r   r   r#   L   s   z$BaseDiT.supported_attention_backendsc                 C   s   t |  jS )zGet the device of the model.)next
parametersdevicer1   r   r   r   r4   P   s   zBaseDiT.device)r   N)NN)r%   
__module____qualname__r   list__annotations__r   dictintr   r   setr	   r   strr   r"   r   torchTensor
LongTensorr.   r0   propertyr#   r4   __classcell__r   r   r   r   r
      s>   
 "	
r
   c                       s   e Zd ZU dZg Zi Zi Zi Zee	d< e
e	d< e
e	d< e
e	d< e jZee e	d< dedd	f fd
dZedeeeeef f fddZ  ZS )CachableDiTz
    An intermediate base class that adds TeaCache optimization functionality to DiT models.

    Inherits TeaCacheMixin for cache logic and BaseDiT for core DiT functionality.
    lora_param_names_mappingr   r   r   r   r    r   Nc                    s    t  j|fi | |   d S r,   )r   r"   _init_teacache_state)r&   r    r'   r   r   r   r"   k   s   zCachableDiT.__init__c                 C   s   i S )aW  
        Get quantization rules for Nunchaku quantization.

        Returns a dict mapping layer name patterns to quantization configs:
        {
            "skip": [list of patterns to skip quantization],
            "svdq_w4a4": [list of patterns for SVDQ W4A4],
            "awq_w4a16": [list of patterns for AWQ W4A16],
        }
        r   )r   r   r   r   get_nunchaku_quant_ruleso   s   z$CachableDiT.get_nunchaku_quant_rules)r%   r5   r6   __doc__r   r   r   rC   r9   r8   r:   r   r   r;   r	   r"   classmethodr<   r   rE   rA   r   r   r   r   rB   V   s   
 (rB   )abcr   r   typingr   r=   r   $sglang.multimodal_gen.configs.modelsr   ,sglang.multimodal_gen.runtime.cache.teacacher   r   'sglang.multimodal_gen.runtime.platformsr	   Moduler
   rB   r   r   r   r   <module>   s   A