o
    *jm                     @   s,  d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ e	 Zded	ee d
ee defddZdefddZdd Zdd ZdedefddZdee fddZded	ee dee fddZded	edee fddZ	d"dedee defd d!ZdS )#    N)
MethodType)AnyListOptional)
get_logger)Tasks)	INDEX_KEY)LazyImportModuleis_torch_availableis_transformers_available	model_dir	task_name
model_typereturnc                 C   sP   |d u s|d u r
dS d||ft  t v rdS tj| d}tj|r&dS dS )NFZMODELSTzms_wrapper.py)r	   Zget_ast_indexr   ospathjoinexists)r   r   r   Zms_wrapper_path r   a/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/utils/automodel_utils.pycan_load_by_ms   s   
r   
module_objc                 C   sX   ddl m} t| dr&dt| jj v r(dt| j	v r*t
|j| | _d S d S d S d S )Nr   PreTrainedModel_set_gradient_checkpointingvaluezmodelscope.)transformersr   hasattrinspect	signaturer   
parameterskeysstr	__class__r   )r   r   r   r   r   fix_upgrade   s   

r$   c                 O   s   t |  | j|i | d S N)r$   post_init_origin)selfargskwargsr   r   r   	post_init'   s   r*   c                  C   sn   t  r/t r1dd l} ddlm} ddlm} || j|dkr3t|ds5|j	|_
t	|_	d S d S d S d S d S )Nr   r   )versionz4.35.0r&   )r   r
   r   r   	packagingr+   parse__version__r   r*   r&   )r   r   r+   r   r   r   fix_transformers_upgrade,   s   
r/   automodel_classc                 C   s8   | j }t|| j v rdS t|dr||jv rdS dS )NTauto_mapF)__name__typeZ_model_mappingr!   r   r1   )r0   configZautomodel_class_namer   r   r   _can_load_by_hf_automodel8   s   r5   c                    s   dd l m  m} t| dsd S | j dd   D }t|dkr)t||d S t|dkrEtt fdd|D dkrEt||d S d S )Nr   r1   c                 S   s   g | ]	}| d r|qS )	AutoModel)
startswith.0kr   r   r   
<listcomp>F   s    z)get_default_automodel.<locals>.<listcomp>   c                    s   g | ]} | qS r   r   r8   r1   r   r   r;   J   s    )	Zmodelscope.utils.hf_utilutilshf_utilr   r1   r!   lengetattrset)r4   r?   Zautomodel_listr   r=   r   get_default_automodelA   s   
rC   c              
   C   s   ddl m}m}m}m}m}m} tj|tj	|tj
|tj|tj|i}tj| d}	tj|	s0d S z4|j| dd}
|d u rAt|
}n||d }|d u rNW d S t||
rV|W S ||u rbt||
rb|W S W d S  tyn   Y d S w )Nr   )
AutoConfigr6   AutoModelForCausalLMAutoModelForSeq2SeqLMAutoModelForTokenClassification"AutoModelForSequenceClassificationzconfig.jsonF)Ztrust_remote_code)
modelscoperD   r6   rE   rF   rG   rH   r   ZbackboneZchatZtext_generationZtext_classificationZtoken_classificationr   r   r   r   from_pretrainedrC   getr5   	Exception)r   r   rD   r6   rE   rF   rG   rH   Zautomodel_mappingZconfig_pathr4   r0   r   r   r   get_hf_automodel_classO   s6    

rM   use_hfc                 K   sH   t | |}|r|d u rtd| dd }|d ur"|j| fi |}|S )Nz&Model import failed. You used `use_hf=z&`, but the model is not a model of hf.)rM   
ValueErrorrJ   )r   r   rN   r)   r0   modelr   r   r   try_to_load_hf_modelr   s   
rQ   owner_groupc                 C   sH   | sdS |du rddg}|  d d} tj| } tj| }||v S )zThis checking is for the torch.load, this function may eval malicious code into memory

    Args:
        model_dir: The local model_dir
        owner_group: The owner group to trust

    Returns:
        bool: Whether the group can be trusted
    FNZiicZdamo/\)rstripr   r   dirnamebasename)r   rR   groupr   r   r   check_model_from_owner_group   s   rY   r%   )r   r   typesr   typingr   r   r   rI   r   Zmodelscope.metainfor   Zmodelscope.utils.ast_utilsr   Zmodelscope.utils.import_utilsr	   r
   r   loggerr"   boolr   r$   r*   r/   r3   r5   rC   rM   rQ   rY   r   r   r   r   <module>   sB    

	

#
