o
    *Îj#  ã                   @   s¬   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 e	ƒ Z
dd„ Zdd	„ Z				dd
edeeeddf  dee deeeedf  ddf
dd„Zdefdd„ZdS )é    N)ÚOptionalÚUnion)Úsnapshot_download)Ú_patch_pretrained_class)Ú
get_loggerc                 C   sH   t | tƒr"|  ¡ }| d¡}|d dkr"dg|dd …  }d |¡} | S )Nú:r   ZgpuÚcudaé   Ú )Ú
isinstanceÚstrÚlowerÚsplitÚjoin)ÚdeviceZdevice_nameZeles© r   új/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/utils/hf_util/pipeline_builder.pyÚ_get_hf_device   s   


r   c                 C   sD   ddl m}m} | s||ƒ} || ƒ\}}}|d }t|gƒd }|S )Nr   )Ú
check_taskÚget_taskÚimpl)Ztransformers.pipelinesr   r   r   )ÚtaskÚmodelr   r   Znormalized_taskZtargeted_taskZtask_optionsÚpipeline_classr   r   r   Ú_get_hf_pipeline_class   s   r   r   r   ZPreTrainedModelZTFPreTrainedModelÚ	frameworkr   ztorch.deviceÚreturnztransformers.Pipelinec                 K   s~   ddl m} t|tƒrtj |¡st|ƒ}|dkrdn|}t|ƒ}t	| |ƒ}| 
dd ¡ | 
dd ¡ |d| ||||dœ|¤ŽS )	Nr   )ÚpipelineZpytorchÚptZexternal_engine_for_llmZllm_framework)r   r   r   r   r   r   )Ztransformersr   r   r   ÚosÚpathÚexistsr   r   r   Úpop)r   r   r   r   Úkwargsr   r   r   r   r   Úhf_pipeline   s$   

ûúr$   c                    sx   zddl m‰  W n ty   tdƒd ‚w t| tƒr$tj | ¡s$t| ƒ} ddl	m
} G ‡ fdd„d|ƒ}|| fi |¤ŽS )Nr   ©ÚSentenceTransformerz’Could not import sentence_transformers, please upgrade to the latest version of sentence_transformers with: 'pip install -U sentence_transformers')ÚPipelinec                       sJ   e Zd ZdZdef‡ fdd„Z		d
deee B dB dedB fdd	„ZdS )zCsentence_transformers_pipeline.<locals>.SentenceTransformerPipelinezA wrapper for sentence_transformers.SentenceTransformer to make it compatible
        with the modelscope pipeline conventions.Ú
model_pathc                    s   ˆ |fi |¤Ž| _ d S )N)r   )Úselfr(   r#   r%   r   r   Ú__init__M   s   zLsentence_transformers_pipeline.<locals>.SentenceTransformerPipeline.__init__NÚ	sentencesÚprompt_namec                 [   sP   |  dd ¡}|d ur|d }| jj|fi |¤Ž}d|iS | jj|fd|i|¤ŽS )NÚinputZsource_sentenceZtext_embeddingr,   )r"   r   Úencode)r)   r+   r,   r#   Z
input_dataÚresr   r   r   Ú__call__P   s   ÿÿÿzLsentence_transformers_pipeline.<locals>.SentenceTransformerPipeline.__call__)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   Úlistr0   r   r%   r   r   ÚSentenceTransformerPipelineI   s    þÿþr6   )Zsentence_transformersr&   ÚImportErrorr   r   r   r    r!   r   Zmodelscope.pipelinesr'   )r   r#   r'   r6   r   r%   r   Úsentence_transformers_pipeline<   s   ÿþÿ
r8   )NNNN)r   Útypingr   r   Zmodelscope.hubr   Z modelscope.utils.hf_util.patcherr   Zmodelscope.utils.loggerr   Úloggerr   r   r   Úintr$   r8   r   r   r   r   Ú<module>   s0    
üÿþýü
ú