
    .`i2                        d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-  G d dej.                  Z/ G d dej.                  Z0 e-d           G d de                      Z1dee2e3ej4        f                  de5e3         de2ee2e3ej4        f                  ee2e3ej4        f                  f         fdZ6 G d d e1          Z7 e-d           G d! d"ej.        e+                      Z8d#ej4        d$ej4        d%e9ddfd&Z:dS )'    N)Iterable)nn)RobertaConfig)ModelConfigPoolerConfig
VllmConfig)BOSEOSFilterDispatchPoolerPooler)pooler_for_embed)AllPoolpooler_for_token_classifypooler_for_token_embed)VocabParallelEmbedding)DefaultModelLoader)default_weight_loader)TOKEN_TYPE_SHIFTBertEmbeddingModel	BertModel_decode_token_type_ids_encode_token_type_ids)AutoWeightsLoaderWeightsMappermaybe_prefix)IntermediateTensors   )BertWithRopeJinaRobertaModel)SupportsCrossEncoding)default_pooling_typec            	       n     e Zd Zdef fdZ	 d	dej        dej        dej        dz  dej        fdZ xZS )
RobertaEmbeddingconfigc                    t                                                       |j        | _        t	          |j        |j                  | _        |j        | _        t          j
        |j        |j        | j                  | _        t          j
        |j        |j                  | _        t          j        |j        |j                  | _        |                     dt%          j        |j                                      d                     d S )N)padding_idx)epsposition_idsr   )super__init__hidden_sizesizer   
vocab_sizeword_embeddingspad_token_idr%   r   	Embeddingmax_position_embeddingsposition_embeddingstype_vocab_sizetoken_type_embeddings	LayerNormlayer_norm_epsregister_buffertorcharange	unsqueeze)selfr#   	__class__s     v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/model_executor/models/roberta.pyr)   zRobertaEmbedding.__init__0   s    &	5v1 
  
 ".#%<*($
 $
 $
  &(\"F$6&
 &
" f&8f>STTTL788BB1EE	
 	
 	
 	
 	
    N	input_idsr'   inputs_embedsreturnc                     t          |          }||                     |          }|                     |          }|                     |          }||z   |z   }|                     |          }|S N)r   r-   r1   r3   r4   )r:   r>   r'   r?   token_type_idsr1   r3   
embeddingss           r<   forwardzRobertaEmbedding.forwardF   sz     0	::  00;;M"66|DD $ : :> J J"%::=PP
^^J//
r=   rB   )	__name__
__module____qualname__r   r)   r7   TensorrE   __classcell__r;   s   @r<   r"   r"   /   s        
} 
 
 
 
 
 
4 .2	 < l |d*	
 
       r=   r"   c                   H     e Zd ZdZd fdZdej        dej        fdZ xZS )	RobertaClassificationHeadz-Head for sentence-level classification tasks.model_configr   c                     t                                                       |j        }|j        }t	          j        |j        |j        |          | _        t	          j        |j        |j        |          | _	        d S )Ndtype)
r(   r)   	hf_config
head_dtyper   Linearr*   dense
num_labelsout_proj)r:   rN   r#   rS   r;   s       r<   r)   z"RobertaClassificationHead.__init__]   sp    '!,
Yv163EZXXX
	 1
 
 
r=   xr@   c                     |                      |          }t          j        |          }|                     |          }|S rB   )rU   r7   tanhrW   )r:   rX   s     r<   rE   z!RobertaClassificationHead.forwardf   s4    JJqMMJqMMMM!r=   )rN   r   )	rF   rG   rH   __doc__r)   r7   rI   rE   rJ   rK   s   @r<   rM   rM   Z   si        77
 
 
 
 
 
 %,        r=   rM   CLS)seq_pooling_typec                        e Zd ZdZdddedef fdZ	 	 ddej        d	ej        d
e	dz  dej        dz  dej        f
dZ
	 ddededeez  fdZdeeeej        f                  fdZ xZS )RobertaEmbeddingModelz?A model that uses Roberta to provide embedding functionalities. prefixvllm_configrb   c                z    t                                          ||           |j        j        j        | _        d S )Nrc   rb   )r(   r)   rN   rR   r.   r%   )r:   rc   rb   r;   s      r<   r)   zRobertaEmbeddingModel.__init__r   s7    [@@@ + 8 B Or=   Nr>   	positionsintermediate_tensorsr?   r@   c                 b    t          ||| j                   |                     ||||          S )Nr>   r'   r%   r>   rf   r?   rg   )replace_roberta_positionsr%   model)r:   r>   rf   rg   r?   s        r<   rE   zRobertaEmbeddingModel.forwardv   sN     	"iTEU	
 	
 	
 	
 zz'!5	  
 
 	
r=   c                     |j         j        }t          ||          }t          |dd          dk    rt	          di |dt
          iS t          di |S )Nre   position_embedding_typeabsoluteembedding_class )rN   rR   dictgetattrr   r"   r   )r:   rc   rb   rR   kwargss        r<   _build_modelz"RobertaEmbeddingModel._build_model   sm      ,6	+f===97DD
RRHHvHH7GHHHH#--f---r=   weightsc                     t          |          }t          d |D                       }|rt          ddi          }nt          ddi          }t          | dg          }|                    ||          S )	Nc              3   F   K   | ]\  }}|                     d           V  dS )roberta.N
startswith).0name_s      r<   	<genexpr>z5RobertaEmbeddingModel.load_weights.<locals>.<genexpr>   sC       !
 !
,3D!DOOJ''!
 !
 !
 !
 !
 !
r=   ry   zmodel.)orig_to_new_prefixr`   zlm_head.)skip_prefixesmapper)listanyr   r   load_weights)r:   rv   weights_listhas_roberta_prefixr   loaders         r<   r   z"RobertaEmbeddingModel.load_weights   s    G}}  !
 !
7C!
 !
 !
 
 
  	F #z86LMMMFF #r8nEEEF"4
|DDD""<"???r=   )NN)r`   )rF   rG   rH   r[   r   strr)   r7   rI   r   rE   r   r   ru   r   tupler   rJ   rK   s   @r<   r_   r_   n   s<       IIAC P P Pz P3 P P P P P P <@-1
 
<
 <
 2D8	

 |d*
 

 
 
 
, 68. .%./2.	\	!. . . .@HU33D-E$F @ @ @ @ @ @ @ @r=   r_   all_weightssecondary_weightsr@   c                 v    t          j        |           \  }}fdfd|D             fd|D             fS )Nc                 <     t           fdD                       S )Nc              3   B   K   | ]}                     |          V  d S rB   rz   )r|   fns     r<   r   z=filter_secondary_weights.<locals>.filtered.<locals>.<genexpr>   s-      >>q1<<??>>>>>>r=   )r   )r   r   s   `r<   filteredz*filter_secondary_weights.<locals>.filtered   s(    >>>>,=>>>>>>r=   c              3   <   K   | ]\  }} |          ||fV  d S rB   rq   r|   r   wr   s      r<   r   z+filter_secondary_weights.<locals>.<genexpr>   s8      ;;tq!xx{{;QF;;;;;;r=   c              3   <   K   | ]\  }} |          ||fV  d S rB   rq   r   s      r<   r   z+filter_secondary_weights.<locals>.<genexpr>   sL       > >1axx{{>	
A> > > > > >r=   )	itertoolstee)r   r   all_weights1all_weights2r   s    `  @r<   filter_secondary_weightsr      s|     "+{!;!;L,? ? ? ? ? <;;;|;;; > > > >'> > >  r=   c                   x     e Zd ZdZdddedef fdZdedefd	Z	d
e
eeej        f                  f fdZ xZS )BgeM3EmbeddingModelzA model that extends RobertaEmbeddingModel with sparse embeddings.

    This class supports loading an additional sparse_linear.pt file
    to create sparse embeddings as described in https://arxiv.org/abs/2402.03216
    r`   ra   rc   rb   c                z   j         j        j        | _        j         }|j        | _        |j        j        | _        |j        j        | _        t                                          |           ddg| _        d | j        D             | _	        fdt          | j	        | j                  D             | _        d S )Nre   zsparse_linear.zcolbert_linear.c                     g | ]}|d z   S )ptrq   )r|   rb   s     r<   
<listcomp>z0BgeM3EmbeddingModel.__init__.<locals>.<listcomp>   s)     '
 '
 '
$FTM'
 '
 '
r=   c                 \    g | ](\  }}t          j        j        j        d ||g          )S )N)model_or_pathrevisionrb   allow_patterns_overrides)r   SourcerN   rl   )r|   filenamerb   rc   s      r<   r   z0BgeM3EmbeddingModel.__init__.<locals>.<listcomp>   sU     
"
 
"
 
"
 !& %)6<*2	  
"
 
"
 
"
r=   )rN   rR   r*   rS   bos_token_ideos_token_idr(   r)   secondary_weight_prefixessecondary_weight_fileszipr   )r:   rc   rb   rN   r;   s    `  r<   r)   zBgeM3EmbeddingModel.__init__   s    &3=I"/&1(2?(2?[@@@*:<M)N&'
 '
(,(F'
 '
 '
#
"
 
"
 
"
 
"
 %(+T-K% %
"
 
"
 
"
r=   pooler_configr@   c                    t          j        | j        d| j                  | _        t          j        | j        | j        | j                  | _        t          t          |          t          t          || j                  | j
                  t          t          |t                      | j        t          j                  | j
        | j                  d          S )Nr   rP   )pooling
classifieract_fn)embedtoken_embedtoken_classify)r   rT   r*   rS   sparse_linearcolbert_linearr
   r   r	   r   r   r   r   r7   relur   )r:   r   s     r<   _build_poolerz!BgeM3EmbeddingModel._build_pooler   s    Yt'7$/RRR id.do
 
 
 )-88+*=$:MNN%   
 #/-% '		#'#5$z	   %%	# 	# 
 
 	
r=   r   c                 b   t          || j                  \  }}t                                          |           t	          |                                           }|D ]O\  }t          fd| j        D                       r*|         }t          |dt                    } |||           Pd S )Nc              3   B   K   | ]}                     |          V  d S rB   rz   )r|   rb   r}   s     r<   r   z3BgeM3EmbeddingModel.load_weights.<locals>.<genexpr>   s@        ,2''     r=   weight_loader)	r   r   r(   r   rr   named_parametersr   rs   r   )
r:   r   	secondaryrv   params_dictloaded_weightparamr   r}   r;   s
           @r<   r   z BgeM3EmbeddingModel.load_weights   s    57
 
	7 	W%%%4002233#, 	4 	4D-    6:6T     4 $D) '@U V Ve]333	4 	4r=   )rF   rG   rH   r[   r   r   r)   r   r   r   r   r   r7   rI   r   rJ   rK   s   @r<   r   r      s          BD 
 
 
z 
3 
 
 
 
 
 
4
< 
F 
 
 
 
64sEL7H1I(J 4 4 4 4 4 4 4 4 4 4r=   r   c                   (    e Zd ZdZdZ eddddddd	d
d          Zdddedef fdZ	de
eeej        f                  fdZdej        dej        fdZ	 	 	 ddej        dz  dej        dedz  dej        dz  dej        dz  dej        fdZ xZS ) RobertaForSequenceClassificationad  A model that uses Roberta to provide embedding functionalities.

    This class encapsulates the BertModel and provides an interface for
    embedding operations and customized pooling functions.

    Attributes:
        roberta: An instance of BertModel used for forward operations.
        _pooler: An instance of Pooler used for pooling operations.
    Tzembeddings.LayerNormlayerzattention.self.qkv_projzattention.output.densezattention.output.LayerNormzintermediate.densezoutput.densezoutput.LayerNorm)emb_lnlayersz
mixer.Wqkvzmixer.out_projnorm1zmlp.fc1zmlp.fc2norm2)orig_to_new_substrr`   ra   rc   rb   c                   t                                                       |j        j        }|j        j        j        | _        |j        | _        t          |t          |d          t                    | _
        t          |j                  | _        |j        j        }|J t          j        || j                  | _        d S )Nbert)rc   rb   rp   )r   )r(   r)   rN   rR   r.   r%   rV   r   r   r"   robertarM   r   r   r
   for_seq_clspooler)r:   rc   rb   r#   r   r;   s        r<   r)   z)RobertaForSequenceClassification.__init__  s    )3 + 8 B O + #//,
 
 

 4K4LMM#0>((($0
 
 
r=   rv   c                 X    t          |           }|                    || j                  S )Nr   )r   r   jina_to_vllm_mapper)r:   rv   r   s      r<   r   z-RobertaForSequenceClassification.load_weights2  s+    "4((""743K"LLLr=   r>   r@   c                 6    | j                             |          S rB   )r   embed_input_ids)r:   r>   s     r<   r   z0RobertaForSequenceClassification.embed_input_ids6  s    |++I666r=   Nrf   rg   r?   rC   c                     t          ||| j                   |3| j        j        j        dt
          z  k     sJ |J t          ||           |                     ||||          S )Nri   r   rj   )rk   r%   r   r#   r,   r   r   )r:   r>   rf   rg   r?   rC   s         r<   rE   z(RobertaForSequenceClassification.forward9  s     	"iTEU	
 	
 	
 	
 %<&1Q:J5JKKKK((("9n===||'!5	  
 
 	
r=   )NNN)rF   rG   rH   r[   is_pooling_modelr   r   r   r   r)   r   r   r7   rI   r   r   r   rE   rJ   rK   s   @r<   r   r     s{         '-,361+%'	
 	
   BD 
 
 
z 
3 
 
 
 
 
 
*MHU33D-E$F M M M M7 7%, 7 7 7 7 <@-1.2
 
<$&
 <
 2D8	

 |d*
 t+
 

 
 
 
 
 
 
 
r=   r   r>   r'   r%   c                     ||dz   z  }d S )Nr   rq   ri   s      r<   rk   rk   P  s     K!O#LLLr=   );r   collections.abcr   r7   r   transformersr   vllm.configr   r   r   !vllm.model_executor.layers.poolerr	   r
   r   )vllm.model_executor.layers.pooler.seqwiser   )vllm.model_executor.layers.pooler.tokwiser   r   r   3vllm.model_executor.layers.vocab_parallel_embeddingr   /vllm.model_executor.model_loader.default_loaderr   -vllm.model_executor.model_loader.weight_utilsr   vllm.model_executor.models.bertr   r   r   r   r    vllm.model_executor.models.utilsr   r   r   vllm.sequencer   bert_with_roper   r   
interfacesr   interfaces_baser    Moduler"   rM   r_   r   r   rI   r   r   r   r   intrk   rq   r=   r<   <module>r      s       $ $ $ $ $ $        & & & & & & = = = = = = = = = =         
              
 W V V V V V N N N N N N O O O O O O                      
 . - - - - - : : : : : : : : - - - - - - 1 1 1 1 1 1' ' ' ' 'ry ' ' 'V    	   ( u---5@ 5@ 5@ 5@ 5@. 5@ 5@ .-5@p%U\ 123Cy 8E#u|+,-xc5<>O8P/QQR   K4 K4 K4 K4 K4/ K4 K4 K4\ u---I
 I
 I
 I
 I
ry2G I
 I
 .-I
X
$|
$+0<
$FI
$	
$ 
$ 
$ 
$ 
$ 
$r=   