o
    پi                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ eeZeG dd dZe dd	ed
efddZe Zed ej  Zrkejedd dS dS )    N)	dataclassfield)	lru_cache)AbstractSetDictListOptionalTupleTypeUnion)envsc                   @   s   e Zd ZU eedZeeee	e
j ef f ed< 	ddededefddZd	ee fd
dZdee fddZded	ee	e
j  fddZdeeee f d	ee fddZdeeee f d	ee	e
j ef fddZdS )_ModelRegistry)default_factorymodelsFpackage_name	overwritestrictc                 C   sZ   t ||d}|r| j| d S | D ]\}}|| jv r%td| d|| j|< qd S )N)r   zModel architecture z3 already registered. Set overwrite=True to replace.)import_model_classesr   updateitems
ValueError)selfr   r   r   
new_modelsarchcls r   N/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/registry.pyregister   s   

z_ModelRegistry.registerreturnc                 C   s
   | j  S N)r   keysr   r   r   r   get_supported_archs$   s   
z"_ModelRegistry.get_supported_archsarchitecturesc                    sB   |    t fdd|D rtd| dtd| d  )Nc                 3   s    | ]}| v V  qd S r   r   ).0r   all_supported_archsr   r   	<genexpr>*   s    z8_ModelRegistry._raise_for_unsupported.<locals>.<genexpr>zModel architectures z@ failed to be inspected. Please check the logs for more details.z5 are not supported for now. Supported architectures: )r"   anyr   )r   r#   r   r%   r   _raise_for_unsupported'   s   
z%_ModelRegistry._raise_for_unsupported
model_archc                 C   s   || j vrd S | j | S r   r   )r   r*   r   r   r   _try_load_model_cls5   s   

z"_ModelRegistry._try_load_model_clsc                    sR   t |tr|g}|std tt fdd|}t|t|kr'|d |S )Nz$No model architectures are specifiedc                    s
   |  j v S r   r+   )modelr!   r   r   <lambda>F   s   
 z1_ModelRegistry._normalize_archs.<locals>.<lambda>TransformersForCausalLM)
isinstancestrloggerwarninglistfilterlenappend)r   r#   normalized_archr   r!   r   _normalize_archs;   s   


z_ModelRegistry._normalize_archsc                 C   s<   |  |}|D ]}| |}|d ur||f  S q| |S r   )r9   r,   r)   )r   r#   r   	model_clsr   r   r   resolve_model_clsN   s   


z _ModelRegistry.resolve_model_clsN)FF)__name__
__module____qualname__r   dictr   r   r1   r   r
   nnModule__annotations__boolr   r   r"   r   r)   r   r,   r9   r	   r;   r   r   r   r   r      s.   
 (

r   Fr   r   c                 C   s  i }t | }t|j| d D ]|\}}}|s|dd tj v r-t	
d| d qzt |}W n  tyT } z|r? t	d| d|  W Y d }~qd }~ww t|dr|j}	t|	trz|	D ]}
|
j|vssJ d|
j |
||
j< qdq|	j|vsJ d|	j |	||	j< q|S )	N.zSkip loading z# due to SGLANG_DISABLED_MODEL_ARCHSz!Ignore import error when loading z: 
EntryClassz$Duplicated model implementation for )	importlibimport_modulepkgutiliter_modules__path__splitr   SGLANG_DISABLED_MODEL_ARCHSgetr2   debug	Exceptionr3   hasattrrF   r0   r4   r<   )r   r   model_arch_name_to_clspackage_nameispkgmoduleeentrytmpr   r   r   r   \   sB   




r   zsglang.srt.modelsT)r   )F) rG   loggingrI   dataclassesr   r   	functoolsr   typingr   r   r   r   r	   r
   r   torch.nnr@   sglang.srt.environr   	getLoggerr<   r2   r   r1   rC   r   ModelRegistryr   SGLANG_EXTERNAL_MODEL_PACKAGErN   external_pkgr   r   r   r   <module>   s$   $
J#
