o
    ॵi	                     @   s   d dl Z d dlmZmZmZ d dlZ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mZ d dlmZ d d	lmZmZ d
gZdd ZejejejdG dd
 d
eZdS )    N)AnyDictUnion)
load_model)	_FastText)	Pipelines)
OutputKeys)InputPipeline)	PIPELINES)	ModelFileTasks&FasttextSequenceClassificationPipelinec                 C   s4   g }|  |D ]}| }|r|| qd|S )N )EncodeAsPiecesstripappendjoin)sp_modelsenttokensts r   r/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/nlp/fasttext_text_classification_pipeline.pysentencepiece_tokenize   s   

r   )module_namec                	       s   e Zd Zdeeef f fddZdedeeef fddZ		ddeeef d	e
deeef fd
dZdeeef deeef fddZ  ZS )r   modelc                    s|   t  j|d tj|tj}tj|d}tj|r(tj|r(tj|s,J dt	|| _
t | _| j| dS )zuse `model` and `preprocessor` to create a nlp text classification pipeline for prediction

        Args:
            model: A model directory including model.bin and spm.model
        )r   zsentencepiece.modelzL`model` should be a directory contains `model.bin` and `sentencepiece.model`N)super__init__ospathr   r   TORCH_MODEL_BIN_FILEisdirexistsr   r   sentencepieceSentencePieceProcessorspmLoad)selfr   kwargs
model_filespm_file	__class__r   r   r   !   s   &

z/FasttextSequenceClassificationPipeline.__init__inputsreturnc                 C   s   |  }t| j|}||dS )N)text_sptext)r   r   r'   )r)   r/   r2   r1   r   r   r   
preprocess0   s   
z1FasttextSequenceClassificationPipeline.preprocessNtopkc                 C   sb   |d u r
| dd}| jj|d |d\}}dd |D }tj|d tj|d tj|tj|i}|S )Nr4   r1   )kc                 S   s   g | ]}| d dqS )	__label__ )replace).0xr   r   r   
<listcomp>;   s    zBFasttextSequenceClassificationPipeline.forward.<locals>.<listcomp>r   )getr   predictr   LABELSCORELABELSSCORES)r)   r/   r4   labelprobsresultr   r   r   forward5   s   

z.FasttextSequenceClassificationPipeline.forwardc                 C   s   |S Nr   )r)   r/   r   r   r   postprocessD   s   z2FasttextSequenceClassificationPipeline.postprocessrG   )__name__
__module____qualname__r   strr   r   r   r   r3   intrF   rH   __classcell__r   r   r-   r   r      s    


*)r    typingr   r   r   numpynpr%   fasttextr   fasttext.FastTextr   modelscope.metainfor   modelscope.outputsr   modelscope.pipelines.baser	   r
   modelscope.pipelines.builderr   modelscope.utils.constantr   r   __all__r   register_moduletext_classificationdomain_classificationr   r   r   r   r   <module>   s"   	