
    9i'                         S SK r S SKJrJrJrJr  S SKrS SKJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJr  SrSrSrSrSrS/r \RB                  " \RD                  \RD                  S9 " S S\5      5       r#g)    N)AnyDictOptionalUnion)	Pipelines)Model)T5Chat)
OutputKeysTokenGeneratorOutput)Pipeline)	PIPELINES)Preprocessor)"remove_space_between_chinese_chars)	ModelFileTasksu~   假设我和你正在进行对话，请你给我得体、准确、友好的回复。以下是我们的对话内容。{context}u   假设我和你正在进行对话，请你给我得体、准确、友好的回复。以下是我们的对话内容。{context}#以下是在此之前我们的对话内容，可作为回复时的参考。{history}u   假设我和你正在进行对话，请你给我得体、准确、友好的回复。以下是我们的对话内容。{context}#以下是和对话相关的知识，请你参考该知识进行回复。{knowledge}u  假设我和你正在进行对话，请你给我得体、准确、友好的回复。以下是我们的对话内容。{context}#假设以下是你对我所了解的信息，请你参考该信息并避免你的回复和该信息矛盾，信息如下：{user_profile}u   假设我和你正在进行对话，请你给我得体、准确、友好的回复。以下是我们的对话内容。{context}#假设以下是你的人物设定，请你参考该信息并避免你的回复和该信息矛盾，信息如下：{bot_profile}FidDialoguePipeline)module_namec            	          ^  \ rS rSr    SS\\\4   S\\   S\S\4U 4S jjjr	S r
S\\\4   4S	 jrS\\\4   S
\\\4   4S jrS rS rS\S
\\\4   4S jrSrU =r$ )r      modelpreprocessorconfig_filedevicec           	        > [         T	U ]  " S
UUUUUS.UD6  [        U R                  [        5      U l        Uc0  [        R                  " U R                  R                  40 UD6U l	        U R
                  (       d[  / n[        SS5       H  nUR                  SU S35        M     U R                  R                  R                  R                  SU05        [        U R                  [        5      (       d   S[         R"                   35       eU R                  R%                  U R&                  5      U l        U R                  R)                  5         S	U l        g)u  Use `model` and `preprocessor` to create a fid-dialogue pipeline for prediction.

Args:
    model (str or Model): Supply either a local model dir which supported the text generation task,
    or a model id from the model hub, or a torch model instance.
    preprocessor (Preprocessor): An optional preprocessor instance, please make sure the preprocessor fits for
    the model if supplied.
    kwargs (dict, `optional`):
        Extra kwargs passed into the preprocessor's constructor.
    Examples:
        >>> from modelscope.pipelines import pipeline
        >>> from modelscope.utils.constant import Tasks
        >>> pipeline_ins = pipeline(Tasks.fid_dialogue, model='damo/plug-dialogue', model_revision='v1.0.1')
        >>> input = {
        >>>    "history": "你好[SEP]你好，我是小达，很高兴认识你！[SEP]李白是谁",
        >>>    "bot_profile": "我是小达;我是女生;我是单身;我今年21岁;我生日是2001年11月11日",
        >>>    "knowledge": "唐代诗人李白（701年—762年12月）,字太白,号青莲居士,又号“谪仙人”[SEP]李白（公元701年—公元762年），字太白",
        >>>    "user_profile": "你是小明"
        >>> }
        >>> result = pipeline_ins(input)
        >>> print(result)
)r   r   r   r   auto_collateN   d   z[unused]additional_special_tokensz,please check whether model config exists in [SEP] )super__init__
isinstancer   r	   is_t5r   from_pretrained	model_dirpreprocessor_tokenizerrangeappendnlp_tokenizer	tokenizeradd_special_tokensr   r   CONFIGURATIONtor   evalSEP)
selfr   r   r   r   r   kwargsunused_listi	__class__s
            n/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/nlp/fid_dialogue_pipeline.pyr#   FidDialoguePipeline.__init__#   s,   : 	 	%#%	 	  

F3
*6*F*F

$$+0(.+0D'zzK1c]""WQCq>2 #''55??RR,k:< $**e,, 	U:9;R;R:ST	U,ZZ]]4;;/


    c                 v    UR                  S0 5      nUR                  S0 5      nUR                  S0 5      nX#U4$ )Npreprocess_paramsforward_paramspostprocess_params)get)r2   pipeline_parametersr;   r<   r=   s        r7   _sanitize_parameters(FidDialoguePipeline._sanitize_parameters[   sI    /334GL,001A2F0445I2N 2DDDr9   inputsc                     [         R                  " 5          U R                  R                  " U40 UD6sS S S 5        $ ! , (       d  f       g = f)N)torchno_gradr   generate)r2   rB   r<   s      r7   forwardFidDialoguePipeline.forwarda   s,    ]]_::&&v@@ __s	   =
Areturnc                    SnSnSU;   a  UR                  S5      nSU;   a  UR                  S5      nSU;   a  US   OSn[        U5      S::  a  [        S5      eS	U;   a  US	   OSnS
U;   a  US
   OSnSU;   a  US   OSnUR                  U R                  5      nXT* S  n	U R                  U	5      n	US U*  nU R                  U5      nUR                  U R                  5      n/ n
U(       a1  [        U5      S:  a"  U
R                  [        R                  XS95        U(       a:  [        U5      S:  a+  U H%  nU
R                  [        R                  XS95        M'     U(       a1  [        U5      S:  a"  U
R                  [        R                  XS95        U(       a1  [        U5      S:  a"  U
R                  [        R                  XS95        U
(       d"  U
R                  [        R                  U	S95        [        [        U
5      5       H  nU R                  (       a8  X   R!                  SS5      R!                  SS5      R!                  SS5      X'   ML  X   R!                  SS5      R!                  SS5      R!                  SS5      X'   M     U R#                  SU
0SSUSS9S   R%                  S5      R'                  U R(                  5      nSUR'                  [*        R,                  5      R'                  U R(                  5      0nU$ )Ni,     max_encoder_lengthcontext_turnhistory r   zhistory is necessary!	knowledgeuser_profilebot_profile)contextrN   )rS   rP   )rS   rQ   )rS   rR   )rS   
u   ▁<extra_id_22>	u   ▁<extra_id_33>  u   ▁<extra_id_23>
[unused22]
[unused33]
[unused23]src_txtTpt)padding
truncation
max_lengthreturn_tensors	input_ids)poplen	Exceptionsplitr1   process_contextprocess_historyr*   history_templateformatknowledge_templateuser_profile_templatebot_profile_templatecontext_templater)   r%   replacer(   	unsqueezer/   r   rD   int64)r2   rB   r;   rL   rM   rN   rP   rQ   rR   rS   model_inputknowr5   r`   
input_dicts                  r7   
preprocessFidDialoguePipeline.preprocesse   s    !#44!2!6!67K!L..,00@L (1F':&#w<1344+6&+@F;'b	-7 =? 	/</Ff]+B--)-.)&&w/.L=)&&w/OODHH-	s7|a' '''IKY!+!""&--g-NP " C-1%,,# - @A 3{+a/$++# , >? /66w6GHs;'(Azz!,!7!7,"..5gd4F/HHO8<>PIR 
 "-!7!7,"((/l(CGGlE,  ) //$) 0 !
 "-.
 /8il22dkk? 	 ekk255dkkB

 r9   c                     Sn[        [        U5      S-
  SS5       H>  n[        X   5      S:  a  X   S   S;  a	  X   S-   X'   US-   X   -   X'   US:X  a  SOSnM@     S	R                  U5      $ )
N   我r   r   Y   !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~、。，？！；：“”（）【】《》〈〉……   。   ：   你rO   r)   rb   join)r2   context_listsubjectr5   s       r7   re   #FidDialoguePipeline.process_context       s<(1,b"5A<?#a'LO-|-}"./E"9%o?LO&%/eUG 6 ww|$$r9   c                     Sn[        [        U5      S-
  SS5       H>  n[        X   5      S:  a  X   S   S;  a	  X   S-   X'   US-   X   -   X'   US:X  a  SOSnM@     S	R                  U5      $ )
Nr{   r   rw   r   rx   ry   rz   rv   rO   r|   )r2   history_listr   r5   s       r7   rf   #FidDialoguePipeline.process_history   r   r9   c                    UR                   R                  5       R                  5       R                  5       nU R                  R                  US   U R                  S9nSSSSSSSSSSS.
nUR                  5        H  u  pgUR                  Xg5      nM     U R                  (       d  [        U5      n[        R                  U0$ )Nr   )skip_special_tokensrT   rU   rV   rO   )
z<extra_id_22>z<extra_id_33>z<extra_id_23>rW   rX   rY   r    z[CLS]z[PAD]z[UNK])	sequencesdetachcputolistr(   decoder%   itemsrm   r   r
   TEXT)r2   rB   r=   
hypothesesresponsetoken_mappingsts           r7   postprocessFidDialoguePipeline.postprocess   s     %%,,.224;;=
..55qMtzz 6 ; "!!
 "'')DA''-H * zz9(CH**r9   )r1   r%   r   r(   )NNgpuT)__name__
__module____qualname____firstlineno__r   r   strr   r   r#   r@   r   r   rG   rs   re   rf   r   r   __static_attributes____classcell__)r6   s   @r7   r   r      s     9=$($"6eSj)6'56 "6 	6 6pEAd38n ADc3h D+/S>DL%%+"6 +-1#s(^+ +r9   )$retypingr   r   r   r   rD   modelscope.metainfor   modelscope.models.baser   ,modelscope.models.nlp.fid_T5.text_generationr	   modelscope.outputsr
   r   modelscope.pipelines.baser   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.chinese_utilsr   modelscope.utils.constantr   r   rl   rg   ri   rj   rk   __all__register_modulefid_dialoguer   r!   r9   r7   <module>r      s    
 - -  ) ( ? ? . 2 1 M 6 T k l e Z  !
! 	I$:$:<y+( y+<y+r9   