o
    ٷi                     @   s   U d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 er=dZ
eed< dZedB ed< dZedB ed	< d Zeed
< dd dd dd dd dZeeeg ef f ed< eeZG dd dZe Zdd Zdd ZdS )    N)Callable)TYPE_CHECKINGAny)init_logger)current_omni_platform MASTER_ADDRMASTER_PORT	CUDA_HOME
LOCAL_RANKc                   C   s   t ddS )Nr   r   )osgetenv r   r   L/home/ubuntu/.local/lib/python3.10/site-packages/vllm_omni/diffusion/envs.py<lambda>   s    r   c                   C   s   dt jv rtt ddS d S )Nr	   0)r   environintr   r   r   r   r   r      s    c                   C   s   t jdd S )Nr
   )r   r   getr   r   r   r   r      s    c                   C   s   t tjddS )Nr   r   )r   r   r   r   r   r   r   r   r      s    )r   r	   r
   r   environment_variablesc                       sH   e Zd ZdZdZ fddZdd Zdefdd	Zde	fd
dZ
  ZS )PackagesEnvCheckerz2Singleton class for checking package availability.Nc                    s(   | j d u rt | | _ | j   | j S N)	_instancesuper__new__
initialize)cls	__class__r   r   r   (   s   

zPackagesEnvChecker.__new__c                 C   s   i }|  ||d< || _d S )Nhas_flash_attn)_check_flash_attnpackages_info)selfr!   r   r   r   r   .   s   
zPackagesEnvChecker.initializereturnc              	   C   s   t }| sdS | dkrdS zL| }d|v s!d|v s!d|v r$W dS zddl}W W dS  ttfy7   Y nw zddl}W W dS  ttfyK   Y nw ddlm	} |d	k rZtd
W dS  ttfys   |
ddsptd Y dS w )z5Check if flash attention is available and compatible.Fr   TuringTeslaT4NT)__version__z2.6.0zinstall flash_attn >= 2.6.0	has_aiterzCNo Flash Attention backend found, using pytorch SDPA implementation)r   is_cuda_alikeget_device_countget_device_namefa3_fwd_interfaceImportErrorModuleNotFoundErrorflash_attn_interface
flash_attnr'   r   loggerwarning)r"   r!   platformgpu_namer,   r/   r'   r   r   r   r    3   s<   
z$PackagesEnvChecker._check_flash_attnc                 C   s   | j S )z!Get the packages info dictionary.)r!   )r"   r   r   r   get_packages_infoa   s   z$PackagesEnvChecker.get_packages_info)__name__
__module____qualname____doc__r   r   r   boolr    dictr5   __classcell__r   r   r   r   r   #   s    .r   c                 C   s&   | t v r	t |   S tdtd| )Nzmodule z has no attribute )r   AttributeErrorr6   )namer   r   r   __getattr__i   s   
r?   c                   C   s   t t S r   )listr   keysr   r   r   r   __dir__p   s   rB   )r   collections.abcr   typingr   r   vllm.loggerr   vllm_omni.platformsr   r   str__annotations__r	   r   r
   r   r   r;   r6   r1   r   PACKAGES_CHECKERr?   rB   r   r   r   r   <module>   s(   
C