o
    *j                  
   @   s   d dl mZmZmZmZm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 d dlmZ d	d
lmZ dededeeeef  defddZejeje
jdejeje
jdejeje
jdejeje
jdG dd deeeZdS )    )DictListOptionalTupleUnionN)LlamaForCausalLM)Models)
TorchModel)MODELS)
OutputKeys)Tasks   )MsModelMixinsystemtexthistory
max_lengthc                 C   s6  d|  d}||dddj }|  d}||dddj }|jd |jd  }	|	|kr5td|	 d	| d
}
g }|d d d D ]A\}}t|tsKJ t|tsRJ |  d|  d}||dddj }|	|jd  |krq n||
 }
|g| }|	|jd 7 }	q@||
|g}|g| |g }d
|tj|ddfS )Nz<s>[INST] <<SYS>>
z
<</SYS>>

Fpt)Zadd_special_tokensZreturn_tensorsz [/INST]zprepend prompt length z is bigger than max_length  z	 [/INST] z </s><s>[INST] r   )dim)		input_idsstripshapeRuntimeError
isinstancestrjointorchcat)r   r   r   r   	tokenizerZsystem_promptZ
system_idsZtext_promptZtext_idsZprompt_lengthZhistory_promptZhistory_ids_listuserZbotZround_promptZ	round_idsZprompt_listZprompt_ids_list r"   l/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/llama/text_generation.pyget_chat_prompt!   sJ   

r$   )module_namec                   @   s   e Zd ZdedefddZdS )LlamaForTextGenerationinputreturnc                 C   s  dd l }| |}d|vrd}n	|d }|d d|vr d}n	|d }|d d|vr0g }n| |d }|d d|vrDd|d< t||||d |d\}}	|	| j}
| j|
fi |}|d d |
jd	 d f }|j|d
ddd }| }|	||f t
j|t
j|iS )Nr   r   r   r   r   r   i   )r   r   r   r   r    r   TF)Zskip_special_tokensZclean_up_tokenization_spaces)copypopr$   toZdevicegenerater   Zbatch_decoder   appendr   ZRESPONSEZHISTORY)selfr'   r    r)   Z
gen_kwargsr   r   r   promptZ
prompt_idsr   Zgenerate_idsresponser"   r"   r#   chatP   sH   




zLlamaForTextGeneration.chatN)__name__
__module____qualname__r   r1   r"   r"   r"   r#   r&   J   s    r&   )typingr   r   r   r   r   r   Ztransformers.models.llamar   Zmodelscope.metainfor   Zmodelscope.models.baser	   Zmodelscope.models.builderr
   Zmodelscope.outputsr   Zmodelscope.utils.constantr   Zbackboner   r   intr$   Zregister_moduler1   Zllama2llamaZtext_generationr&   r"   r"   r"   r#   <module>   s"   
) 