
    9i
'                         S SK Jr  S SKrS SKJs  Jr  S r  SS jrS S\	" S5      * 4S jr
S r        SS	\S
\S\S\S\	S\	S\S\4S jjrS r         SS	\S
\S\S\	S\	S\S\S\4S jjrg)    )ListNc           
         U R                  5       u  pEU(       a  UnOSn[        R                  " [        R                  " XeU4U R                  S95      R                  USUU5      n[        R                  " U[        R                  U R                  S9nUR                  S5      R                  U 5      nU(       a  UR                  5       nU(       d  U(       a  [        U5       H  n	XX	   U:H  4   n
U(       a  U
R                  5       n
Sn[        U
R                  5       S   5       HG  nX   nU(       a  SXySUS-   S2SUS-   24'   U(       d  M)  XUS-   S24==   US-   U-
  -  ss'   US-   nMI     M     US:  nXx4$ )z4Build masks and position id for left to right model.   )device)dtyper   r   Ng      ?)sizetorchtrilonesr   viewarangelong	unsqueeze	expand_asclonerange)data	eod_tokenreset_position_idsreset_attention_maskmicro_batch_size
seq_lengthatt_mask_batchattention_maskposition_idsb	eod_index
prev_indexjis                 h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/nlp/codegeex/inference.pyget_ltor_masks_and_position_idsr"   	   sv    $(99;  )ZZ

N
;++	'((,^Q
-7)9  <<%**T[[:L))!,66t<L#))+1'(A %9(<%<=I!%OO-	 J9>>+A./L'?@Na!a%8QU8#;<%% QUH-Q1CC-!"QJ 0 )* $c)N''    c                     U R                  US5      R                  5       R                  5       n[        UUUU5      u  pgXVU4$ )z#Generate batch from context tokens.)r   
contiguouscudar"   )context_tokensr   r   r   r   tokensr   r   s           r!   	get_batchr*   B   sO       !126AACHHJF#B	$ N <//r#           Infc                    US:  a#  U [         R                  " X5      S   S   :  nX0U'   US:  a  [         R                  " U SSS9u  pV[         R                  " [        R
                  " USS9SS9nXr:  nUSS	S24   R                  5       USS
S	24'   SUS'   [        UR                  S5      5       H  n	Xi   X      nX0U	   U'   M     U $ )zThis function has been mostly taken from huggingface conversational
ai code at
    https://medium.com/huggingface/how-to-build-a-state-of-the-art-
         conversational-ai-with-transfer-learning-2d818ac26313r   ).r%   Nr+   Tr%   )
descendingdimr/   .Nr   ).r   )	r	   topksortcumsumFsoftmaxr   r   r   )
logitstop_ktop_pfilter_valueindices_to_removesorted_logitssorted_indicescumulative_probssorted_indices_to_remover    s
             r!   top_k_logitsr?   V   s     qy #UZZ%>q%A CG &H H$0 !s{(-

t)-% <<IIm,"6 $4#;  -E"H-eg 	!ab)+, (~**1-.A . 12J2M N+71I'( / Mr#   c                     / nU  H;  n[        U5      nXR:  a  UR                  U/X%-
  -  5        UR                  U5        M=     X4$ )N)lenextendappend)batchpad_idr   context_lengthsr)   context_lengths         r!   	pad_batchrH   x   sO    OV&MM6(j&ABC~.	 
 !!r#   return_scoresprompt_lengthr   bad_idstemperaturetoppr1   greedyc              #     #    [        UUR                  U5      u  pM[        R                  R	                  U5      n[        R                  R	                  U5      nUR                  5       R                  5       n[        UUUR                  5      u  nnn[        U UUUUUUUUUUU	U
UUS9nU H#  u  nnUS-  nUb  US S 2S U24   U4v   M  Sv   M%     g 7f)N)	r   out_seq_lengthrI   rJ   rK   rL   rM   r1   rN   r   )NN)	rH   eos_token_idr	   r'   
LongTensorminitemr*   sample_sequence_batch)model	tokenizerr   rP   r(   rI   rJ   r   rK   rL   rM   r1   rN   rF   context_tokens_tensorcontext_length_tensorrG   r)   r   r   batch_token_iteratorlengthss                         r!   get_token_streamr\      s      '0090F0F0:'<#N "JJ11.A!JJ11/B*..0557N+4,(FNL 1%##$ 0!O^O+,g55 0s   CCc                 >    UR                  U 5      nSU-
  U -  X!-  -   $ )Nr   )type_as)val1val2booleans      r!   switchrb      s&    ood#GK4'.00r#   	recomputec              #     #    U R                  5         [        R                  " 5          UR                  5       R	                  5       nUR
                  nSnUnS nUR                  S5      n[        R                  " U/5      R                  5       R                  5       nUnUc  US-
  nUUU-   :  a  UU-   n[        R                  " U/5      R                  5       R                  5       U-  nU	(       a3  [        R                  " U/5      R                  5       R                  5       nUU::  Ga  U(       a  U " UUUU
US9nUS S 2US-
  S S 24   nOUS:X  a  US S 2S U24   nUS S 2S U24   nO8US S 2US-
  4   R                  US5      nUS S 2US-
  4   R                  US5      nU " UUUUSU
US9u  nnUS S 2S4   R                  US5      R                  5       nUb  U H  nSUS S 2U4'   M     U(       a%  [        R                  " USS9R                  S5      nOtUR                  5       nU	(       a  [        R                   " USS9n UU-  n[#        UXS	9n[$        R&                  " USS9n![        R(                  " U!SS
9R                  S5      nUU:*  n"[+        US S 2U4   R                  S5      UU"5      n#U(       de  U	(       a^  UR                  SS5      n$W R-                  SU$5      R                  S5      n%U%U"-  n%U%UR/                  5       R1                  5       -  n%WU%-  nU#US S 2U4'   UU:H  R                  5       U"R                  5       -  n&U&U) -  R/                  5       n'UUU'R                  S5      '   UU&-  n[        R2                  " U5      n(U	(       a	  UUW44v   OUU4v   US-  nUS-  nU((       a  O	UU::  a  GM  S S S 5        g ! , (       d  f       g = f7f)Nr   r   )rJ   rG   r%   T)
layer_pastget_key_valuerJ   rG   ir0   )r7   r8   )num_samples)evalr	   no_gradrS   rT   rQ   r   zerosbyter'   r   r   floatr   r&   argmaxlog_softmaxr?   r4   r5   multinomialrb   gatherboollogical_notall))rV   rW   r(   rF   r   r   r   rP   maxlenrI   rJ   rK   rL   rM   r1   rc   rN   rG   eos_idcounterorg_context_lengthre   
batch_sizeis_doner)   r[   scoresr6   
tokens2usepositions2usebad_idprevorig_log_probs	log_probsstarted
new_tokensindices
new_scores
done_tokenjust_finisheddones)                                            r!   rU   rU      s    & 
JJL	(,,.335''+
#((+
++zl+002779>!^F+n<=+n<**j\*//16686A[[*.446;;=F( ""/#1  >A#5q 89a<!'?N?(:!;J$0O^O1C$DM!'>A+=(=!>!C!C"B"(J$0NQ4F1F$G$L$L"B%(M%*!")"&"/#1&"
  2++J;FFH"%F(.F1f9% &||F388< %*%6%6v2%FN+%%fDEIIf"5	((BGGK%7Gq.'8 9 > >r BD ')J m))B*+221g>CCBG
''1
'',,.*D*D*FF
*$(2F1n$%&...07<<>AJ'7(288:M.<GM&&r*+
*G99W%Dw///go%aNqLGQ () 
s   &ONO	O
OO)FF)FNNN      ?r   r+   F)	NFNNr   r   r+   FF)typingr   r	   torch.nn.functionalnn
functionalr4   r"   r*   rl   r?   rH   rq   intr\   rb   rU    r#   r!   <module>r      s0      6(z 0(  !5<- D"    3 3 3 3 3 3 3 3 3l1 #p p p p p p p  !p" #pr#   