
    IgJ                         d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZ d dlZd dlZd dlmZ d dlmZ  ed      Ze G d d	             Z G d
 dee         Z G d de      Zy)    N)	dataclass)Path)	AnyDictGenericIterableOptionalSequenceTupleTypeTypeVar)OnnxProvider)WorkerTc                   |    e Zd ZU ej                  ed<   dZeej                     ed<   dZeej                     ed<   y)OnnxOutputContextmodel_outputNattention_mask	input_ids)	__name__
__module____qualname__npndarray__annotations__r   r	   r        X/var/www/html/answerous/venv/lib/python3.12/site-packages/fastembed/common/onnx_model.pyr   r      s2    **+/NHRZZ(/&*Ix

#*r   r   c                       e Zd Zeded   fd       Zdedee   fdZ	ddZ
deeej                  f   deeej                  f   fd	Z	 	 	 dd
ededee   deee      dedee   ddfdZddZdefdZy)	OnnxModelreturnEmbeddingWorkerc                     t        d      Nz%Subclasses must implement this methodNotImplementedError)clss    r   _get_worker_classzOnnxModel._get_worker_class   s    !"IJJr   outputc                     t        d      r$   r%   )selfr)   s     r   _post_process_onnx_outputz#OnnxModel._post_process_onnx_output       !"IJJr   Nc                      d | _         d | _        y N)model	tokenizerr+   s    r   __init__zOnnxModel.__init__   s    
r   
onnx_inputc                     |S )z,
        Preprocess the onnx input.
        r   )r+   r4   kwargss      r   _preprocess_onnx_inputz OnnxModel._preprocess_onnx_input#   s
     r   	model_dir
model_filethreads	providerscuda	device_idc                 Z   ||z  }|t        |      }n|r|dg}ndd|ifg}ndg}t        j                         }	g }
|D ]?  }t        |t              r|n|d   }|
j                  |       ||	vs0t        d| d|	        t        j                         }t        j                  j                  |_
        |||_        ||_        t        j                  t	        |      ||      | _        d|
v r>| j                  j                         }d|vrt!        j"                  d| d	t$               y y y )
NCUDAExecutionProviderr=   CPUExecutionProviderr   z	Provider z( is not available. Available providers: )r;   sess_optionsz@Attempt to set CUDAExecutionProvider failed. Current providers: z.If you are using CUDA 12.x, install onnxruntime-gpu via `pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/`)listortget_available_providers
isinstancestrappend
ValueErrorSessionOptionsGraphOptimizationLevelORT_ENABLE_ALLgraph_optimization_levelintra_op_num_threadsinter_op_num_threadsInferenceSessionr0   get_providerswarningswarnRuntimeWarning)r+   r8   r9   r:   r;   r<   r=   
model_pathonnx_providersavailable_providersrequested_provider_namesproviderprovider_namesocurrent_providerss                  r   _load_onnx_modelzOnnxModel._load_onnx_model+   sj    +
  !)_N "9!:#:[)<T"U!V45N!99;#% & 	H(28S(AHxPQ{M$++M:$77 .VWjVkl 	 !&)&@&@&O&O#&-B#&-B#))
O~B

 #&>> $

 8 8 :&.??VWhVi jg g #	 @ ?r   c                     t        d      r$   r%   r2   s    r   load_onnx_modelzOnnxModel.load_onnx_model`   r-   r   c                     t        d      r$   r%   )r+   argsr6   s      r   
onnx_embedzOnnxModel.onnx_embedc   r-   r   )r!   N)NFN)r   r   r   classmethodr   r(   r   r   r   r,   r3   r   rF   r   r   r7   r   r	   intr
   r   boolr\   r^   ra   r   r   r   r    r       s    K$'8"9 K KK0A Khqk KsBJJ/	c2::o	 7;#'33 3 #	3
 H\233 3 C=3 
3jKK-> Kr   r    c            	           e Zd ZdededefdZdedefdZededededd fd       Z	de
eeef      de
eeef      fd	Zy
)r"   
model_name	cache_dirr!   c                     t               r/   r%   r+   rf   rg   r6   s       r   init_embeddingzEmbeddingWorker.init_embeddingh   s     "##r   c                 6     | j                   ||fi || _        y r/   )rj   r0   ri   s       r   r3   zEmbeddingWorker.__init__p   s     )T((YI&I
r   r6   c                      | d||d|S )N)rf   rg   r   r   )r'   rf   rg   r6   s       r   startzEmbeddingWorker.startx   s    HjIHHHr   itemsc                     t        d      r$   r%   )r+   rn   s     r   processzEmbeddingWorker.process|   r-   r   N)r   r   r   rF   r    rj   r3   rb   r   rm   r   r   rc   rp   r   r   r   r"   r"   g   s    $$ $
 
$JJ J Is Is Ic IFW I IKXeCHo6 K8E#s(O;T Kr   r"   )rQ   dataclassesr   pathlibr   typingr   r   r   r   r	   r
   r   r   r   numpyr   onnxruntimerC   fastembed.common.typesr   fastembed.parallel_processorr   r   r   r    r"   r   r   r   <module>rx      sj     !  Y Y Y   / / CL + + +MK
 MK`Kf Kr   