o
    sh                     @   sr   d dl Z 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 d dlmZmZ G dd dejZdS )	    N)Dict)
load_model)
save_model)Tensornn)fullnameimport_from_stringc                       s   e Zd ZdZde ddfdededededef
 fd	d
Z	de
eef fddZdefddZdd ZddeddfddZdd Zedd Z  ZS )Densea2  
    Feed-forward function with  activiation function.

    This layer takes a fixed-sized sentence embedding and passes it through a feed-forward layer. Can be used to generate deep averaging networks (DAN).

    Args:
        in_features: Size of the input dimension
        out_features: Output size
        bias: Add a bias vector
        activation_function: Pytorch activation function applied on
            output
        init_weight: Initial value for the matrix of the linear layer
        init_bias: Initial value for the bias of the linear layer
    TNin_featuresout_featuresbiasinit_weight	init_biasc                    sl   t t|   || _|| _|| _|| _tj|||d| _	|d ur't
|| j	_|d ur4t
|| j	_d S d S )N)r   )superr	   __init__r
   r   r   activation_functionr   Linearlinear	Parameterweight)selfr
   r   r   r   r   r   	__class__ `/var/www/html/alpaca_bot/venv/lib/python3.10/site-packages/sentence_transformers/models/Dense.pyr      s   	zDense.__init__featuresc              	   C   s"   | d| | |d i |S )Nsentence_embedding)updater   r   )r   r   r   r   r   forward3   s   zDense.forwardreturnc                 C   s   | j S )N)r   r   r   r   r    get_sentence_embedding_dimension7   s   z&Dense.get_sentence_embedding_dimensionc                 C   s   | j | j| jt| jdS )N)r
   r   r   r   )r
   r   r   r   r   r    r   r   r   get_config_dict:   s
   zDense.get_config_dictsafe_serializationc                 C   s~   t tj|dd}t|  | W d    n1 sw   Y  |r0t| tj|d d S t	| 
 tj|d d S )Nconfig.jsonwmodel.safetensorspytorch_model.bin)openospathjoinjsondumpr"   save_safetensors_modeltorchsave
state_dict)r   output_pathr#   fOutr   r   r   r0   B   s   z
Dense.savec                 C   s   d |  S )Nz	Dense({}))formatr"   r    r   r   r   __repr__K   s   zDense.__repr__c                 C   s   t tj| d}t|}W d    n1 sw   Y  t|d  |d< tdi |}tjtj| drEt	|tj| d |S |
tjtj| dtdd |S )Nr$   r   r&   r'   cpu)map_locationr   )r(   r)   r*   r+   r,   loadr   r	   existsload_safetensors_modelload_state_dictr/   device)
input_pathfInconfigmodelr   r   r   r8   N   s   z
Dense.load)T)__name__
__module____qualname____doc__r   Tanhintboolr   r   r   strr   r!   r"   r0   r5   staticmethodr8   __classcell__r   r   r   r   r	      s0    	r	   )r,   r)   typingr   r/   safetensors.torchr   r:   r   r.   r   r   sentence_transformers.utilr   r   Moduler	   r   r   r   r   <module>   s    