o eM#@sNddlZddlmZmZddlmZmZGdddeZ    d d d ZdS) N)StoppingCriteriaStoppingCriteriaList) PromptTypet5_typecsFeZdZgggddddffdd Zdejdejdefd d ZZ S) StoppingCriteriaSubcudaNFcstt|t|dksJd||_fdd|D|_||_dgt||_||_||_||_ d|_ t |jdk|_ dS)Nrz)Number of stops and encounters must matchcsg|]}|qS)to).0stopdevicer/h2ogpt/src/stopping.py sz0StoppingCriteriaSub.__init__..) super__init__len encountersstops stop_words num_stopsmodel_max_length tokenizertruncation_generation token_startmaxlook_at_new_tokens_only)selfrrrr rrr __class__r rr s zStoppingCriteriaSub.__init__ input_idsscoresreturnc Ks|jdur |djd|_|jr|d|jd}n|ddd}tt|j|jD]?\}\}}|t| d}|j |} |jd} t|| krj|| vrj|j |d7<|j ||j |t|j krjdSq+|j r|j dur|djd|j krdSdS)NrrTF)rshaper enumerateziprrrrdecoderrrr) rr!r"kwargs new_tokensstopir stop_word current_block stop_textlen_new_tokensrrr__call__s$   zStoppingCriteriaSub.__call__) __name__ __module__ __qualname__rtorch LongTensor FloatTensorboolr/ __classcell__rrrrrs  "r::Fc  slg} g} tjjttjjtjjgtjjttjjtjjgtjjttjjtjjgtjjttjjtjjgtjjttjjtjjgtj jttj jtj jg} tj jttj jtj jgtj jttj jtj jg}| |}||vr||vr||d|d|g} ddg} nO|| vrgd} |tjjttjjtjjfvrdd| D} |tjjttjjtjjfvrdd| D} ddg} ndg} dg} n|r|j r|j } dgt | } d gt | }| r| | 7} | dgt | 7} |d gt | 7}fd d| D}d d|D}d d|D}jrfdd|D}jr/fdd|D}fdd|D}jr<fdd|D}jrRfdd|D}fdd|D}|rt|rt|D]4\}}|dd}|dd}|dd}fdd|D}tjt|t|t||jd||<q^ddt|| |D}|rtt|| | ||| dg}|St}|S)N r) z ### Human:z ### Human:z ### Human: z ### Human: z ### Human:z### Assistant:z ### Assistant:z ### Assistant: z### Assistant: z### Assistant:cSsg|]}|qSr)upperr xrrrrksz get_stopping..cSsg|]}|ddqS)HumanUser)replacer=rrrrnsz### EndTFcs g|] }|dddqS)pt)return_tensorsr!)squeeze)r r+rrrrscSs*g|]}t|jdkr |nt|gqSr)rr$r3tensorr=rrrrs*cSsg|] }|jddkr|qSrF)r$r=rrrrsc6g|]}|djkrt|dkr|ddn|qSrrN) pad_token_idrr=rErrr6crHrI unk_token_idrr=rErrrrKc6g|]}|djkrt|dkr|ddn|qSrNrLr=rErrrrKcrNrO) eos_token_idrr=rErrrrKcrHrI bos_token_idrr=rErrrrKcrNrOrRr=rErrrrKrrPcs(g|]}|jdkrjdn|qS)r: )vocabr=rErrrs(r cSs2g|]\}}}|ddkr|r|ddn|qS)rr:rNr)r r>yhandle_newlinerrrrs2)rrrr rrr)rinstruct_vicunavaluestrnameguanacoone_shotinstruct_vicuna2instruct_vicuna3instruct_with_end human_bothuman_bot_origterminate_responser _pad_token _unk_token _eos_token _bos_tokenrr%r3rGlistr r&rr) prompt_type prompt_dictrr base_modelhumanbotrprompterr rrruser_human_assistant_typeshuman_bot_types all_typeshandle_newlinesstop_words_idsr* stop_word_idstartmlistendstopping_criteriarrEr get_stopping5s         ,  ry)r8r9NNNF) r3 transformersrrenumsrrrryrrrrs/