o
    rqiE                     @   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 e Zee D ]Zed
 ejkrfed  dkrfee eej ed
 ed f< qG		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modelsZ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.
    Z	group_keyr   Ntype)r	   MODELSKeyErrorr
   )r   r   r   modeleZparent_taskZtask_model_type r   `/home/app/PaddleOCR-VL/.venv_paddleocr/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.
    Z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   Z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)!Zmodelscope.metainfor   Zmodelscope.utils.configr   Zmodelscope.utils.constantr   Zmodelscope.utils.import_utilsr   r   Zmodelscope.utils.loggerr   Zmodelscope.utils.registryr   r	   Zmodelscope.utils.task_utilsr
   r   r   r   r"   Zget_ast_indexmoduleslistkeysZmodule_indexr   nameupperstrdictr   r!   r#   r   r   r   r   <module>   sD   
$