o
    ٷi	                     @   sP   d dl mZ d dlmZ d dlmZ eeZeG dd dZG dd dZ	dS )	    )	dataclass)nn)init_loggerc                   @   sT   e Zd ZU eej ed< ee ed< eej ed< ee ed< dZejdB ed< dS )PipelineModulesdits	dit_namesencodersencoder_namesNvae)	__name__
__module____qualname__listr   Module__annotations__strr
    r   r   b/home/ubuntu/.local/lib/python3.10/site-packages/vllm_omni/diffusion/offloader/module_collector.pyr      s   
 r   c                   @   s>   e Zd ZdZg dZg dZdgZedej	de
fddZd	S )
ModuleDiscoveryz,Discovers pipeline components for offloading)transformertransformer_2ditlanguage_modeltransformer_blocks)text_encodertext_encoder_2text_encoder_3image_encoderr
   pipelinereturnc           	      C   s   g }g }t jD ]5}t| |sqt| |}|du rqt|tjs-td| dt	| q||v r2q|
| |
| qg }g }t jD ]}t| |r_t| |dur_|
t| | |
| qDd}t jD ]}t| |d}|duru|} nqet|||||dS )zDiscover DiT, encoder, and VAE modules from pipeline.

        Args:
            pipeline: Diffusion pipeline model

        Returns:
            PipelineModules with lists of discovered modules and names
        Nz	Expected z to be nn.Module, got )r   r   r   r	   r
   )r   	DIT_ATTRShasattrgetattr
isinstancer   r   loggerwarningtypeappendENCODER_ATTRS	VAE_ATTRSr   )	r   dit_modulesr   attr
module_objr   r	   r
   moduler   r   r   discover   sH   






zModuleDiscovery.discoverN)r   r   r   __doc__r    r(   r)   staticmethodr   r   r   r.   r   r   r   r   r      s    r   N)
dataclassesr   torchr   vllm.loggerr   r   r$   r   r   r   r   r   r   <module>   s   