o
    ॵiw                     @   s  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ	 d dlm
Z d dlmZ d dlmZ d d	lmZ 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 zd dlmZ  d dlm!Z" W n e#yw   dZ dZ"Y nw dddZ$dd Z%dd Z&e%  e&  g fddZ'e'eZe'e	Ze'eZ
e'eZe'eZe'eddgdZe'eddgdZe'eddgdZe Ze"Z!eZe'eZe'eZdS )    N)
AutoConfig)AutoImageProcessor)	AutoModel)AutoModelForCausalLM)AutoModelForSeq2SeqLM)"AutoModelForSequenceClassification)AutoModelForTokenClassification)AutoTokenizer)BatchFeature)BitsAndBytesConfig)GenerationConfig)PreTrainedModelPreTrainedTokenizerBase)snapshot_download)DEFAULT_MODEL_REVISIONInvoke)
GPTQConfig)	AwqConfigc                 C   s    | d u rt j} dt j| f }|S )Nz%s/%s)r   
PRETRAINEDKEY)
invoked_byuagent r   L/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/utils/hf_util.py
user_agent   s   r   c                     "   t jj t fdd} | t _dS )zV Monkey patch PreTrainedTokenizerBase.from_pretrained to adapt to modelscope hub.
    c                    sL   ddg}t j|s|dd }t|||d}n|} | |g|R i |S )N\w+\.bin\w+\.safetensorsrevisionr   ignore_file_patternospathexistspopr   clspretrained_model_name_or_path
model_argskwargsr    r   	model_dirori_from_pretrainedr   r   from_pretrained*   s   z-patch_tokenizer_base.<locals>.from_pretrainedN)r   r.   __func__classmethodr.   r   r,   r   patch_tokenizer_base%      
r2   c                     r   )zN Monkey patch PreTrainedModel.from_pretrained to adapt to modelscope hub.
    c                    sJ   dg}t j|s|dd }t|||d}n|} | |g|R i |S )Nr   r   r   r!   r&   r,   r   r   r.   @   s   z)patch_model_base.<locals>.from_pretrainedN)r   r.   r/   r0   r1   r   r,   r   patch_model_base;   r3   r4   c                    s.   | G  fddd}j |_ j|_|S )al  Get a custom wrapper class for  auto classes to download the models from the ModelScope hub
    Args:
        module_class: The actual module class
        ignore_file_pattern (`str` or `List`, *optional*, default to `None`):
            Any file pattern to be ignored in downloading, like exact file names or file extensions.
    Returns:
        The wrapper
    c                       s   e Zd Ze fddZdS )z'get_wrapped_class.<locals>.ClassWrapperc                    sj   | d }tj|s| dt}t|||t d}n|}j|g|R i |}j	dr3||_
|S )Nr    r   )r   r    r   r   )r%   r"   r#   r$   r   r   r   r.   __name__
startswithr+   )r'   r(   r)   r*   r    r   r+   
module_objdefault_ignore_file_patternmodule_classr   r   r.   b   s$   z7get_wrapped_class.<locals>.ClassWrapper.from_pretrainedN)r5   
__module____qualname__r0   r.   r   r8   r   r   ClassWrapper`   s    r=   )r5   r<   )r:   r    r*   r=   r   r8   r   get_wrapped_classU   s
   	r>   r   r   )r    )N)(r"   transformersr   AutoConfigHFr   AutoImageProcessorHFr   AutoModelHFr   AutoModelForCausalLMHFr   AutoModelForSeq2SeqLMHFr   $AutoModelForSequenceClassificationHFr   !AutoModelForTokenClassificationHFr	   AutoTokenizerHFr
   BatchFeatureHFr   BitsAndBytesConfigHFr   GenerationConfigHFr   r   
modelscoper   modelscope.utils.constantr   r   r   GPTQConfigHFr   AwqConfigHFImportErrorr   r2   r4   r>   r   r   r   r   <module>   sf   
(