
    9i                     f   S SK JrJrJr  S SKrS SKrS SKJs  J	r
  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJr  \" 5       r " S S\R2                  5      r " S	 S
\R2                  5      r " S S\R2                  5      r " S S\R2                  5      r " S S\R2                  5      rg)    )absolute_importdivisionprint_functionN)nn)
checkpoint)
AutoConfig	DPRConfigDPRQuestionEncoderMT5ForConditionalGenerationRagTokenForGeneration#XLMRobertaForSequenceClassificationXLMRobertaModelXLMRobertaTokenizer)
get_loggerc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )Wrapper"   c                 6   > [         [        U ]  5         Xl        g N)superr   __init__encoder)selfr   	__class__s     c/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/nlp/dgds/backbone.pyr   Wrapper.__init__$   s    gt%'    c                 8    U R                  X5      R                  $ r   )r   pooler_output)r   	input_idsattention_maskdummy_tensors       r   forwardWrapper.forward(   s    ||I6DDDr   )r   __name__
__module____qualname____firstlineno__r   r#   __static_attributes____classcell__r   s   @r   r   r   "   s    E Er   r   c                   H   ^  \ rS rSrU 4S jr\SS j5       r SS jrSrU =r	$ )DPRModel,   c                   > [         TU ]  5         X l        [        [        R
                  " [        R                  R                  US5      5      S9n[        [        R
                  " [        R                  R                  US5      5      S9n[        U5      U l
        [        U5      U l        [        R                  " 5       U l        g )Nqry_encoderconfigctx_encoder)r   r   r3   r   r   from_pretrainedospathjoinr   r1   r4   r   CrossEntropyLossloss_fct)r   	model_dirr3   r1   r4   r   s        r   r   DPRModel.__init__.   s    %--Y689 &--Y689 #;/";/++-r   c                    [         R                  " S[         R                  SS9n/ n[        SUR                  S   U5       H/  nXUU-    nX&UU-    n[        XUU5      n	UR                  U	5        M1     [         R                  " USS9$ )N   T)dtyperequires_gradr   dim)torchonesfloat32rangeshaper   appendcat)
modelr    r!   gck_segmentr"   pooled_output
mini_batchmini_batch_input_idsmini_batch_attention_maskmini_batch_pooled_outputs
             r   encodeDPRModel.encode<   s    zz!5==M9??1#5{CJ#,
/:9; $< (6*9DCE )F%'1%2K2>(@$   !9: D yyA..r   c                     U R                  U R                  UX&5      nU R                  U R                  UXF5      n[        R                  " XxR
                  5      n	U R                  X5      n
X4$ r   )rQ   r1   r4   rC   matmulTr:   )r   query_input_idsquery_attention_maskcontext_input_idscontext_attention_masklabelsrK   query_vectorcontext_vectorlogitslosss              r   r#   DPRModel.forwardK   sg     {{4#3#3_#7FT%5%57H%;Jl,<,<=}}V,|r   )r3   r4   r:   r1   )    )
r&   r'   r(   r)   r   staticmethodrQ   r#   r*   r+   r,   s   @r   r.   r.   ,   s+    . / /(  r   r.   c                   F   ^  \ rS rSrU 4S jr          SS jrSrU =r$ )ClassifyRerank[   c                 X   > [         TU ]  5         [        R                  " U5      U l        g r   )r   r   r   r5   
base_model)r   r;   r   s     r   r   ClassifyRerank.__init__]   s#    =MMr   c                 H    U R                   R                  UUUUUUUU	U
S9	nU$ )N)	r    r!   token_type_idsposition_ids	head_maskinputs_embedsoutput_attentionsoutput_hidden_statesreturn_dict)rf   r#   )r   r    r!   ri   rj   rk   rl   rZ   rm   rn   ro   argskwargsoutputss                 r   r#   ClassifyRerank.forwardb   s?     //))))%'/!5# * 	% r   )rf   )
NNNNNNNNNNr%   r,   s   @r   rc   rc   [   s2     ##!""&%)  r   rc   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )Rerank|   c                 :   > [         TU ]  5         Xl        X l        g r   )r   r   r   top_k)r   r   rx   r   s      r   r   Rerank.__init__~   s    
r   c                     U R                   n[        R                  " U" S0 UD6S   SS9S S 2S4   nUR                  SU R                  5      n[        R                  " USS9nU$ )Nr   rA   r>    )r   Flog_softmaxviewrx   )r   inputsrJ   r]   logprobss        r   r#   Rerank.forward   sX    uvq1r:1a4@R,==R0r   )r   rx   r%   r,   s   @r   ru   ru   |   s    
 r   ru   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )	Re2GModel   c                   > [         [        U ]  5         X l        U R                  S   U l        [        [        R                  " [        R                  R                  US5      5      S9n[        [        R                  " [        R                  R                  US5      5      S9n[        X0R                  5      U l        [        5       nUR                  R                  Ul        [!        [#        U5      US9nS UR$                  l        X`l        g )Nrx   rerankr2   
generation)question_encoder	generator)r   r   r   r3   rx   r   r   r5   r6   r7   r8   r   ru   r   r	   
vocab_sizer   r
   ragr   r   )r   r;   r3   r   r   
dpr_config	rag_modelr   s          r   r   Re2GModel.__init__   s    i')[[)
5--Y134 0--Y578	 Wjj1[
 ' 9 9
)/
;!	 *.	&"r   c                 b    U R                  U5      nU R                  UUUUU R                  S9nU$ )N)rZ   rX   rY   
doc_scoresn_docs)r   r   rx   )r   rerank_input_idsr    r!   	label_idsr   rr   s          r   r#   Re2GModel.forward   s>    [[!12
..'#1!:: !  r   c                 (   U R                  U5      nU R                  R                  U R                  UUUUU R                  S   U R                  S   SU R                  S   SSS9nUR                  5       R                  5       R                  5       nU$ )N	num_beamstarget_sequence_lengthTno_repeat_ngram_size)r   encoder_input_idsrX   rY   r   r   
max_lengthearly_stoppingr   return_dict_in_generateoutput_scores)r   r   generaterx   r3   detachcpunumpy)r   r   r    r!   r   beam_search_outputgenerated_idss          r   r   Re2GModel.generate   s    [[!12
!^^44::''#1!kk+.{{#;<!%-C!D$( 5   +113779??Ar   )r3   r   r   rx   )	r&   r'   r(   r)   r   r#   r   r*   r+   r,   s   @r   r   r      s    #*	 r   r   )
__future__r   r   r   os.pathr6   rC   torch.nn.functionalr   
functionalr}   torch.utils.checkpointr   transformersr   r	   r
   r   r   r   r   r   modelscope.utils.loggerr   loggerModuler   r.   rc   ru   r   r|   r   r   <module>r      s   " A @      -/ / /
 /	Ebii E,ryy ,^RYY BRYY 3		 3r   