o
    ߥi?                     @   s  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ e
 ZedZeZed	Zeje Zee D ]Zed
 ejkreed  dkreee eej ed
 ed f< qF		ddededefddZddedefddZ		ddededefddZ dS )    )Models)
ConfigDict)Tasks)	INDEX_KEYLazyImportModule)
get_logger)Registrybuild_from_cfg)get_task_by_subtask_namemodelsheads   	BACKBONES   Ncfg	task_namedefault_argsc              
   C   sr   zt | t||d}W |S  ty8 } z!t|\}}|du r!t||| d< t | t||d}W Y d}~|S d}~ww )a   build model given model config dict

    Args:
        cfg (:obj:`ConfigDict`): config dict for model object.
        task_name (str, optional):  task name, refer to
            :obj:`Tasks` for more details
        default_args (dict, optional): Default initialization arguments.
    	group_keyr   Ntype)r	   MODELSKeyErrorr
   )r   r   r   modeleparent_tasktask_model_type r   M/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/builder.pybuild_model   s    r   c              	   C   s   |  dds| dd}n|  dd}zt| ttj|d}W |S  tyE   td| j	 d t
j| d< || d< t| ttj|d}Y |S w )	z build backbone given backbone config dict

    Args:
        cfg (:obj:`ConfigDict`): config dict for backbone object.
        default_args (dict, optional): Default initialization arguments.
    init_backboneF	model_dirNr   zThe backbone zR is not registered in modelscope, try to import the backbone from hf transformers.r   )getpopr	   r   r   backboner   loggerwarningr   r   transformers)r   r   r    r   r   r   r   build_backbone2   s2   
r'   c                 C   s   t | t||dS )a   build head given config dict

    Args:
        cfg (:obj:`ConfigDict`): config dict for head object.
        task_name (str, optional):  task name, refer to
            :obj:`Tasks` for more details
        default_args (dict, optional): Default initialization arguments.
    r   )r	   HEADS)r   r   r   r   r   r   
build_headU   s   r)   )NN)N)!modelscope.metainfor   modelscope.utils.configr   modelscope.utils.constantr   modelscope.utils.import_utilsr   r   modelscope.utils.loggerr   modelscope.utils.registryr   r	   modelscope.utils.task_utilsr
   r$   r   r   r(   	AST_INDEXmoduleslistkeysmodule_indexr#   nameupperstrdictr   r'   r)   r   r   r   r   <module>   sD   

$