o
    i̖i                     @  s   d dl mZ d dlZd dlZd dlmZmZ d dlm	Z	 d dl
Zd dlZe Zeej ddgZ	ddddZG dd dZdS )    )annotationsN)	ExitStacknullcontext)Path@  >  	force_cpuboolonnx_file_pathPath | str | Nonereturnonnxruntime.InferenceSessionc                 C  s   |d u rt jdd }t j|}tt|}n%t|}| s)t	d| |
 s4t	d| t|}tt|}t }|dd |dd d|_d|_tjj|_| rmd	t v rmtj|d	g|d
}|S tj||d}|S )Nz livekit.plugins.silero.resourceszsilero_vad.onnxz!Silero VAD model file not found: z*`onnx_file_path` specified is not a file: zsession.intra_op.allow_spinning0zsession.inter_op.allow_spinning   CPUExecutionProvider)	providerssess_options)r   )	importlib	resourcesfilesas_filestr_resource_filesenter_contextr   existsFileNotFoundErroris_filer   onnxruntimeSessionOptionsadd_session_config_entryinter_op_num_threadsintra_op_num_threadsExecutionModeORT_SEQUENTIALexecution_modeget_available_providersInferenceSession)r   r
   resctxpathoptssession r,   c/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/plugins/silero/onnx_model.pynew_inference_session   s0   
r.   c                   @  sJ   e Zd ZdddZedd	d
ZedddZedddZdddZdS )	OnnxModelonnx_sessionr   sample_rateintr   Nonec                C  s   || _ || _|tvrtd|dkrd| _d| _n
|dkr#d| _d| _tj|tjd| _	tj
d	| jftjd| _tj
d
tjd| _tj
d	| j| j ftjd| _d S )Nz4Silero VAD only supports 8KHz and 16KHz sample ratesr          r   i   @   )dtyper   )   r      )_sess_sample_rateSUPPORTED_SAMPLE_RATES
ValueError_window_size_samples_context_sizenparrayint64_sample_rate_ndzerosfloat32_context
_rnn_state_input_buffer)selfr0   r1   r,   r,   r-   __init__6   s    zOnnxModel.__init__c                 C     | j S N)r;   rI   r,   r,   r-   r1   K      zOnnxModel.sample_ratec                 C  rK   rL   )r>   rM   r,   r,   r-   window_size_samplesO   rN   zOnnxModel.window_size_samplesc                 C  rK   rL   )r?   rM   r,   r,   r-   context_sizeS   rN   zOnnxModel.context_sizex
np.ndarrayfloatc                 C  s|   | j | jd d d | jf< || jd d | jd f< | j| j| jd}| jd |\}| _| jd d | j d f | _ | S )N)inputstatesr)rF   rH   r?   rG   rC   r:   runitem)rI   rQ   
ort_inputsoutr,   r,   r-   __call__W   s   zOnnxModel.__call__N)r0   r   r1   r2   r   r3   )r   r2   )rQ   rR   r   rS   )	__name__
__module____qualname__rJ   propertyr1   rO   rP   r[   r,   r,   r,   r-   r/   5   s    
r/   rL   )r   r	   r
   r   r   r   )
__future__r   atexitimportlib.resourcesr   
contextlibr   r   pathlibr   numpyr@   r   r   registercloser<   r.   r/   r,   r,   r,   r-   <module>   s   !